KONIEC KONWERSACJI (Transact-SQL)

Kończy się po jednej stronie istniejącej konwersacji.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

END CONVERSATION conversation_handle
   [   [ WITH ERROR = failure_code DESCRIPTION = 'failure_text' ]
     | [ WITH CLEANUP ]
    ]
[ ; ]

Argumenty

  • conversation_handle
    To dojście do konwersacji konwersacji zakończyć.

  • Z powodu błędu =failure_code
    Jest kodem błędu.failure_code Jest typu int.Kod błędu jest zdefiniowany przez użytkownika kod zawarty w komunikacie o błędzie wysyłane do drugiej stronie konwersacji.Kod błędu musi być większa niż 0.

  • Opis =failure_text
    Pojawia się komunikat o błędzie.failure_text Jest typu nvarchar(3000).Tekst błędu jest zdefiniowany przez użytkownika tekstu, który znajduje się w komunikacie o błędzie wysyłane do drugiej stronie konwersacji.

  • Z OCZYSZCZANIA
    Usuwa wszystkie wiadomości i wykazu zapisy na jednej stronie konwersacji nie można ukończyć normalnie.Strony konwersacji nie jest powiadamiany o oczyszczanie.Microsoft SQL Serverkrople punkt końcowy konwersacji, wszystkie wiadomości konwersacji w kolejce transmisji i wszystkie wiadomości konwersacji w kolejce usługa .Administratorzy mogą użyć tej opcji do usunięcia konwersacji, które nie zostało zakończone normalnie.Na przykład jeśli usługa zdalnego zostały trwale usunięte, administrator może użyć z oczyszczania usunąć konwersacji do tej usługa.Nie należy używać z oczyszczania w kodzie Service Broker aplikacji.Jeśli koniec KONWERSACJI Z oczyszczania jest uruchamiana przed odbierającym punktu końcowego potwierdza odbieraniu wiadomości, wysyłanie punkt końcowy zostanie ponownie wysłać wiadomość.Może to potencjalnie ponownie okno dialogowe.

Uwagi

Kończenie konwersacji blokuje grupa konwersacji , przewidziano conversation_handle należy do.Po zakończeniu konwersacji Service Broker Usuwa wszystkie wiadomości konwersacji z kolejki usługa .

Po zakończeniu konwersacji aplikacji można już wysyłać ani odbierać wiadomości do tej konwersacji.Zarówno uczestnicy konwersacji należy wywołać KONWERSACJI zakończenia dla konwersacji do wykonania.Jeśli Service Broker nie otrzymał komunikat okna dialogowego zakończenia lub komunikat o błędzie z innych uczestnik konwersacji, Service Broker notyfikuje innych uczestnik konwersacji, która konwersacja się zakończyła.W tym przypadekchociaż dojście do konwersacji do konwersacji nie jest już prawidłowy, punkt końcowy dla konwersacji pozostaje aktywny aż do wystąpienie zdalnego usługa hostów potwierdza wiadomości.

Jeśli Service Broker jeszcze nie zostało przetworzone końca okno dialogowe błędu wiadomość lub konwersacji, Service Broker powiadamia strony zdalnej konwersacji, która konwersacja się zakończyła.Wiadomości, Service Broker wysyła do zdalnej usługa są zależne od opcji określonych:

  • Jeśli Rozmowę kończy się bez błędów i konwersacji do zdalnego usługa jest wciąż aktywne, Service Broker wysyła komunikat typu https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog do zdalnego usługa.Service Brokerdodaje tę wiadomość do kolejki transmisji w celu konwersacji.Service Brokerwysyła wszystkie wiadomości konwersacji, które są obecnie w kolejce transmisji przed wysłaniem tej wiadomości.

  • Jeśli konwersacji kończy się błędem i konwersacji do zdalnego usługa jest wciąż aktywne Service Broker wysyła komunikat typu https://schemas.microsoft.com/SQL/ServiceBroker/Error do zdalnego usługa.Service Brokerobecnie spadnie inne komunikaty do tej konwersacji w kolejce transmisji.

  • Oczyszczanie Z klauzula umożliwia administrator bazy danych usunąć konwersacji, które nie zostało zakończone normalnie.Ta opcja usuwa wszystkie wiadomości i zapisy wykazu dla konwersacji.Należy zauważyć, że w tym przypadekstrona zdalna konwersacji otrzymuje żadnego wskazania Konwersacja została zakończona i nie może odbierać wiadomości, które wysłana przez aplikację, ale jeszcze nie przesłanych przez sieć.Tej opcji należy unikać, chyba że konwersacji nie można ukończyć normalnie.

Po zakończeniu konwersację, Transact-SQL wysłać powoduje, że instrukcja , która określa dojście do konwersacji Transact-SQL błąd.Jeśli wiadomości do tej konwersacji przychodzą od strony konwersacji, Service Broker powoduje odrzucenie tych wiadomości.

Jeżeli konwersacji kończy się podczas zdalnego usługa nadal ma niewysłany wiadomości konwersacji, usługa zdalnego spadnie niewysłane wiadomości.To nie jest uważana za błąd i usługa zdalnego odbiera bez powiadomienie , że wiadomości zostały usunięte.

Kody błędów określonych w błąd w klauzula muszą być liczbami dodatnimi.Liczby ujemne są zarezerwowane dla Service Broker komunikatów o błędzie.Aby uzyskać więcej informacji o Service Broker komunikatów o błędach, zobacz Komunikaty systemowe Broker.

KONIEC KONWERSACJI nie jest prawidłowy w zdefiniowanej przez użytkownika funkcja.

Uprawnienia

Aby zakończyć konwersację aktywnego, bieżący użytkownik musi być właścicielem konwersacji element członkowski sysadmin stała rola serwera lub element członkowski db_owner stałej rola bazy danych.

element członkowski sysadminstała rola serwera lub element członkowski db_owner Stała rola bazy danych może usunąć metadane dla konwersacji, która już została zakończona za pomocą oczyszczania Z.

Przykłady

A.Kończenie konwersacji

Poniższy przykład kończy się okno dialogowe określonej przez @dialog_handle.

END CONVERSATION @dialog_handle ;

B.Kończenie konwersacji z błędem

Poniższy przykład kończy się okno dialogowe określonej przez @dialog_handle z powodu błędu, jeśli instrukcja przetwarzania zgłasza błąd.Należy zauważyć, że jest simplistic podejścia do obsługa błędówi nie może być właściwe dla niektórych aplikacji.

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.Czyszczenie konwersacji nie można ukończyć normalnie

Poniższy przykład kończy się okno dialogowe określonej przez @dialog_handle.SQL Serverniezwłocznie usuwa wszystkie wiadomości z kolejki usługa i kolejki transmisji bez powiadamiania zdalnego usługa.Ponieważ kończące się okno dialogowe z oczyszczania nie powiadamia zdalnego usługa, należy używać tylko to w przypadkach, gdy usługa zdalnego nie są dostępne do otrzymywania EndDialog lub o wiadomości.

END CONVERSATION @dialog_handle WITH CLEANUP ;