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
Ez egy meglévő beszélgetés egyik oldalát zárja.
Transact-SQL szintaxis konvenciók
Syntax
END CONVERSATION conversation_handle
[ [ WITH ERROR = failure_code DESCRIPTION = 'failure_text' ]
| [ WITH CLEANUP ]
]
[ ; ]
Arguments
conversation_handle
A beszélgetés címe, hogy véget érjen a beszélgetés?
HIBA =failure_code
Ez a hibakód.
A failure_codeaz int. típusú. A hibakód egy felhasználó által definiált kód, amely a beszélgetés másik oldalának küldött hibaüzenetbe is belekerül. A hibakódnak nagyobbnak kell lennie 0-nál.
LEÍRÁS =failure_text
Ez a hibaüzenet.
A failure_textnvarchar(3000) típusú. A hibaüzenet egy felhasználó által definiált szöveg, amely a beszélgetés másik oldalának küldött hibaüzenetben szerepel.
A TAKARÍTÁSSAL
Eltávolítja az összes üzenetet és katalógusnézet bejegyzést egy olyan beszélgetés oldaláról, amely normál esetben nem fejezhető be. A beszélgetés másik oldalát nem értesítik a takarításról. Microsoft SQL Server eltávolítja a beszélgetés végpontját, az összes üzenetet a beszélgetéshez az átviteli sorban, valamint az összes üzenetet a szolgáltatási sorban lévő beszélgetéshez. Az adminisztrátorok ezt az opciót használhatják arra, hogy eltávolítsák azokat a beszélgetéseket, amelyek normál esetben nem fejeződnek be. Például, ha a távoli szolgáltatást véglegesen eltávolították, az adminisztrátor a WITH CLEANUP segítségével eltávolíthatja a beszélgetéseket az adott szolgáltatásból. Ne használd a WITH CLEANUP kifejezést egy Service Broker alkalmazás kódjában. Ha END CONVERSATION a WITH CLEANUP futás előtt fut le, mielőtt a fogadó végpont visszajelzést kapott, a küldő végpont újra elküldi az üzenetet. Ez potenciálisan újraindíthatja a párbeszédet.
Remarks
A beszélgetés lezárása lezárja azt a csoportot, amelyhez a megadott conversation_handle tartozik. Amikor egy beszélgetés véget ér, a Service Broker eltávolítja az összes üzenetet a beszélgetéshez a szolgáltatási sorból.
A beszélgetés vége után az alkalmazás már nem tud üzeneteket küldeni vagy fogadni ehhez a beszélgetéshez. Mindkét résztvevőnek kell szólnia END CONVERSATION , hogy a beszélgetés befejeződjön. Ha a Service Broker nem kapott végi párbeszédüzenetet vagy hibaüzenetet a beszélgetés másik résztvevőjétől, értesíti a beszélgetés másik résztvevőjét a beszélgetés végéről. Ebben az esetben, bár a beszélgetés kezelő címe már nem érvényes, a beszélgetés végpontja aktív marad, amíg a távoli szolgáltatást üzemeltető példány meg nem ismeri az üzenetet.
Ha a Service Broker még nem dolgozta fel a beszélgetés végét vagy hibaüzenetét, értesíti a beszélgetés távoli oldalát, hogy a beszélgetés véget ért. A Service Broker által a távoli szolgáltatásnak küldött üzenetek a megadott opcióktól függnek:
Ha a beszélgetés hibázatlanul végződik, és a távoli szolgáltatással folytatott beszélgetés továbbra is aktív, a Service Broker egy típusú
https://schemas.microsoft.com/SQL/ServiceBroker/EndDialogüzenetet küld a távoli szolgáltatásnak. A Service Broker ezt az üzenetet a kommunikációs sorrendben adja hozzá az átviteli sorhoz. A Service Broker minden üzenetet elküld ebben a beszélgetésben, amelyek jelenleg az átviteli sorban vannak, mielőtt elküldené ezt az üzenetet.Ha a beszélgetés hibával ér véget, és a távoli szolgáltatással való beszélgetés továbbra is aktív, a Service Broker egy üzenetet
https://schemas.microsoft.com/SQL/ServiceBroker/Errorküld a távoli szolgáltatásnak. A Service Broker eltávolítja a jelenleg a továbbítási sorban lévő egyéb üzeneteket ehhez a beszélgetéshez.A WITH CLEANUP záradék lehetővé teszi az adatbázis-adminisztrátor számára, hogy eltávolítsa azokat a beszélgetéseket, amelyek nem záródnak le normálisan. Ez az opció eltávolítja az összes üzenetet és katalógusnézet bejegyzést a beszélgetéshez. Figyeljük meg, hogy ebben az esetben a beszélgetés távoli oldala nem kap jelzést arról, hogy a beszélgetés véget ért, és lehet, hogy nem kap olyan üzeneteket, amelyeket egy alkalmazás küldött, de még nem továbbított a hálózaton keresztül. Kerüld ezt az opciót, hacsak a beszélgetés nem záródik le normálisan.
A beszélgetés vége után egy Transact-SQL SEND utasítás, amely megadja a beszélgetés kezelőnevét, Transact-SQL hibát okoz. Ha a beszélgetéshez érkező üzenetek a beszélgetés másik oldaláról érkeznek, a Szolgáltató eltünteti ezeket az üzeneteket.
Ha a beszélgetés akkor ér véget, amikor a távoli szolgáltatásnak még el nem küldött üzenetei vannak, a távoli szolgáltatás eltávolítja az elküldetlen üzeneteket. Ez nem minősül hibának, és a távoli szolgáltatás nem kap értesítést arról, hogy üzenetek elküldtek.
A WITH ERROR klauzuládban meghatározott hibakódoknak pozitív számoknak kell lenniük. A negatív számokat a Szolgáltató Közvetítő hibaüzeneteinek fenntartják.
END CONVERSATION nem érvényes egy felhasználó által definiált függvényben.
Permissions
Az aktív beszélgetés lezárásához a jelenlegi felhasználónak kell a beszélgetés tulajdonosának, a rendszergazdák fix szerver tagjának vagy a db_owner fix adatbázis szerepének tagjának lennie.
A rendszergazdálkodó fix szerver szerepének tagja vagy a db_owner fix adatbázis szerepének tagja a WITH CLEANUP segítségével eltávolíthatja a már befejezett beszélgetés metaadatait.
Examples
A. Egy beszélgetés lezárása
A következő példa a párbeszédet zárja, amelyet .@dialog_handle
END CONVERSATION @dialog_handle ;
B. Egy beszélgetés végén hibával zárunk
A következő példa hibával zárja a jelölt @dialog_handle párbeszédet, ha a feldolgozási utasítás hibát jelent. Figyeld meg, hogy ez egy egyszerű hibakezelési megközelítés, és nem feltétlenül alkalmas bizonyos alkalmazásokhoz.
DECLARE
@dialog_handle UNIQUEIDENTIFIER,
@ErrorSave INT,
@ErrorDesc NVARCHAR(100);
BEGIN TRANSACTION;
-- Receive and process message
SET @ErrorSave = @@ERROR;
IF (@ErrorSave <> 0)
BEGIN
ROLLBACK TRANSACTION;
SET @ErrorDesc = N'An error has occurred.';
END CONVERSATION @dialog_handle
WITH ERROR = @ErrorSave DESCRIPTION = @ErrorDesc;
END;
ELSE
COMMIT TRANSACTION;
C. Egy beszélgetés rendje, ami nem tud normálisan befejeződni
A következő példa a párbeszédet zárja, amelyet .@dialog_handle Az SQL Server azonnal eltávolítja az összes üzenetet a szolgáltatási sorból és az átviteli sorból, anélkül, hogy értesítené a távoli szolgáltatást. Mivel a párbeszéd tisztítással befejezése nem értesíti a távoli szolgáltatást, ezt csak akkor kell használni, ha a távoli szolgáltatás nem elérhető EndDialog vagy hibaüzenet fogadására.
END CONVERSATION @dialog_handle WITH CLEANUP;