Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Managed Instance
Üzenetet küld, egy vagy több meglévő beszélgetés segítségével.
Transact-SQL szintaxis konvenciók
Syntax
SEND
ON CONVERSATION [(]conversation_handle [,.. @conversation_handle_n][)]
[ MESSAGE TYPE message_type_name ]
[ ( message_body_expression ) ]
[ ; ]
Arguments
A BESZÉLGETÉSRŐL conversation_handle [.. @conversation_handle_n]
Megadja azokat a beszélgetéseket, amelyekhez az üzenet tartozik. A conversation_handle érvényes beszélgetésazonosítót kell tartalmaznia. Ugyanazt a beszélgetési név nem használható többször.
MESSAGE TYPE
message_type_name
Megadja az üzenet küldött üzenettípusát. Ezt az üzenettípust be kell foglalni a beszélgetések által használt szolgáltatási szerződésekbe. Ezeknek a szerződéseknek lehetővé kell tenniük, hogy az üzenet típusa erről az oldalról érkezzen. Például a beszélgetések célszolgáltatásai csak olyan üzeneteket küldhetnek, amelyeket a szerződésben KÜLDÖTT CÉL vagy BÁRKI KÜLDÖTT. Ha ezt a záradékot kihagyjuk, az üzenet az üzenettípus DEFAULT.
message_body_expression
Az üzenet testét ábrázoló kifejezést biztosít.
A message_body_expression opcionális. Ha azonban a message_body_expression jelen van, akkor a kifejezésnek olyan típusúnak kell lennie, amely átalakítható varbináris(max)-ra. A kifejezés nem lehet NULL. Ha ezt a záradékot kihagyjuk, az üzenettest üres.
Remarks
Important
Ha az utasítás SEND nem az első utasítás egy tételben vagy tárolt eljárásban, az előző utasítást egy félkópolóval (;)) kell lezárni.
A SEND nyilatkozat üzenetet továbbít az egyik vagy több szolgáltatási közvetítő beszélgetés egyik végén lévő szolgáltatásokból a másik oldalon lévő szolgáltatásokhoz. Ezt követően a RECEIVE küldött üzenetet a célszolgáltatásokhoz tartozó sorokból visszaszerzik.
Az ON CONVERSATION záradékhoz mellékelt beszélgetési címek három forrásból származnak:
Ha egy küldött üzenet nem válasz egy másik szolgáltatásból érkezett üzenetre, használd a beszélgetés címét, amely a BEGIN DIALOG utasításból tér vissza, amely létrehozta a beszélgetést.
Ha egy küldött üzenet válasz egy korábban egy másik szolgáltatástól érkezett üzenetre, használjuk az eredeti üzenetet visszaadó üzenet által visszaadott beszélgetési címet RECEIVE .
Az utasítást tartalmazó SEND kód néha különálló attól a kódtól, amely tartalmazza a BEGIN DIALOG-ot vagy RECEIVE a beszélgetés kezelő utasításait. Ilyen esetekben a beszélgetés kezelő adandó eszköz az állapotinformáció egyik adatelemének kell lennie, amely a kódhoz kerül az SEND állítást tartalmazó kódhoz.
Az SQL Server adatbázismotor más példányainak szolgáltatásaihoz küldött üzenetek az aktuális adatbázisban lévő átviteli sorban tárolódnak, amíg továbbítani nem tudják őket a távoli példányok szolgáltatássoraihoz. Az ugyanabban a Database Engine példányában lévő szolgáltatásoknak küldött üzenetek közvetlenül ezekhez a szolgáltatásokhoz tartozó sorokba kerülnek. Ha egy feltétel megakadályozza, hogy egy helyi üzenet közvetlenül a célszolgáltatási sorba kerüljön, az átviteli sor tárolhatja azt, amíg a feltétel meg nem oldódik. Ilyen esetek példái lehetnek bizonyos típusú hibák vagy a célszolgáltatási sor inaktív állapota. A sys.transmission_queue rendszernézetet használhatod, hogy megnézd az üzeneteket az átviteli sorban.
SEND atomi állítás. Ha egy SEND utasítás több beszélgetésen is üzenetet küld, és sikertelenül működik, például amikor egy beszélgetés hibás állapotban van, nem tárolódnak üzenetek az átviteli sorban, és nem kerülnek semmilyen célszolgáltatási sorba.
A Service Broker optimalizálja az üzenetek tárolását és továbbítását, amelyek több beszélgetésen keresztül ugyanabban SEND a nyilatkozatban érkeznek.
A példány átviteli üzenetsoraiban lévő üzenetek egymás után kerülnek továbbításra a következők alapján:
A társított beszélgetési végpont prioritási szintje.
Prioritási szinten belül a küldési sorrendjük a beszélgetésben.
A beszélgetés prioritásaiban megadott prioritási szintek csak akkor kerülnek az átviteli sorban lévő üzenetekre, ha az HONOR_BROKER_PRIORITY adatbázis opció ON-ra van állítva. Ha HONOR_BROKER_PRIORITY OFF állapotba van állítva, az adatbázis átviteli sorában lévő összes üzenet alapértelmezett 5-ös prioritási szintet kap. A prioritási szintek nem kerülnek olyan SEND területre, ahol az üzenetek közvetlenül egy szolgáltatássorba kerülnek ugyanabban a Database Engine-példányban.
Az SEND állítás külön-külön rögzíti az üzenet küldésére irányuló beszélgetéseket, hogy biztosítsa a beszélgetésenkénti rendelést.
SEND nem érvényes egy felhasználó által definiált függvényben.
Permissions
Az üzenet küldéséhez a jelenlegi felhasználónak engedélyt kell RECEIVE kell biztosítania minden szolgáltatás sorában, amely üzenetet küld.
Examples
A következő példa elindít egy párbeszédet, és XML üzenetet küld a párbeszédre. Az üzenet küldéséhez a példa az xml objektumot varbinary(max) formátumra konvertálja.
DECLARE @dialog_handle UNIQUEIDENTIFIER,
@ExpenseReport XML;
SET @ExpenseReport = <construct message as appropriate for the application>;
BEGIN DIALOG @dialog_handle
FROM SERVICE [//Adventure-Works.com/Expenses/ExpenseClient]
TO SERVICE '//Adventure-Works.com/Expenses'
ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseProcessing];
SEND ON CONVERSATION @dialog_handle
MESSAGE TYPE [//Adventure-Works.com/Expenses/SubmitExpense](@ExpenseReport);
A következő példa három párbeszédet indít, és mindegyikre XML üzenetet küld.
DECLARE
@dialog_handle1 UNIQUEIDENTIFIER,
@dialog_handle2 UNIQUEIDENTIFIER,
@dialog_handle3 UNIQUEIDENTIFIER,
@OrderMsg XML;
SET @OrderMsg = '<construct message as appropriate for the application>';
BEGIN DIALOG @dialog_handle1
FROM SERVICE [//InitiatorDB/InitiatorService]
TO SERVICE '//TargetDB1/TargetService'
ON CONTRACT [//AllDBs/OrderProcessing];
BEGIN DIALOG @dialog_handle2
FROM SERVICE [//InitiatorDB/InitiatorService]
TO SERVICE '//TargetDB2/TargetService'
ON CONTRACT [//AllDBs/OrderProcessing];
BEGIN DIALOG @dialog_handle3
FROM SERVICE [//InitiatorDB/InitiatorService]
TO SERVICE '//TargetDB3/TargetService'
ON CONTRACT [//AllDBs/OrderProcessing];
SEND ON CONVERSATION (
@dialog_handle1,
@dialog_handle2,
@dialog_handle3
)
MESSAGE TYPE [//AllDBs/OrderMsg](@OrderMsg);
Lásd még
BEGIN DIALOG CONVERSATION (Transact-SQL)
END CONVERSATION (Transact-SQL)
RECEIVE (Transact-SQL)
sys.transmission_queue (Transact-SQL)