Udostępnij za pośrednictwem


END CONVERSATION (Transact-SQL)

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

Topic link iconKonwencje składni języka Transact-SQL

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

Argumenty

  • conversation_handle
    Czy uchwyt konwersacji konwersacji zakończyć.

  • WITH błąd = failure_code
    To kod błędu.The failure_code is of type int.Kod błędu jest kod definiowany przez użytkownika, która nie znajduje się w komunikacie o błędzie, wysyłane na drugą stronę do konwersacji.Kod błędu musi być większa niż 0.

  • DESCRIPTION = failure_text
    Jest komunikat o błędzie.The failure_text is of type nvarchar(3000).Tekst błędu jest tekst zdefiniowany przez użytkownika, który znajduje się w komunikacie o błędzie, wysyłane na drugą stronę do konwersacji.

  • Z OCZYSZCZANIA
    Usuwa wszystkie wiadomości i zapisy na jednej stronie konwersacji, których nie można ukończyć zwykle wykazu.The other side of the conversation is not notified of the cleanup.Microsoft SQL Server drops the conversation endpoint, all messages for the conversation in the transmission queue, and all messages for the conversation in the service queue.Administratorzy mogą użyć tej opcji do konwersacji, których nie można normalnie zakończyć usuwanie.Na przykład jeśli usługa zdalnego zostały trwale usunięte, administrator może użyć WITH oczyszczania usunąć konwersacji do tej usługi.Nie należy używać z oczyszczania w kodzie Service Broker aplikacja. Jeśli KONWERSACJI END WITH oczyszczania jest uruchamiana, zanim odbierający punktu końcowego potwierdza odbieraniu wiadomości, wysyłanie punkt końcowy zostanie ponownie wysłać wiadomość.Może to potencjalnie ponownie okno dialogowe.

Remarks

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

Po zakończeniu konwersacji, aplikacja może nie jest już wysyłać ani odbierać wiadomości do tej konwersacji.Obydwu uczestników konwersacji musi wywołać KONWERSACJI END dla konwersacji do zakończenia.Jeśli Service Broker nie otrzymał komunikat o zakończeniu okno dialogowe lub komunikat o błędzie od innych uczestnik konwersacji, Service Broker powiadamia użytkownika, inni uczestnicy konwersacji, że Konwersacja została zakończona. W takim przypadek chociaż konwersacji uchwyt konwersacji nie jest już prawidłowy, punkt końcowy dla konwersacji pozostaje aktywny aż do wystąpienie, usługa zdalnego hostów potwierdza wiadomości.

Jeśli Service Broker nie ma już przetworzone zakończenia okna dialogowego lub błąd wiadomości w konwersacji, Service Broker powiadamia użytkownika, jego strony zdalnej konwersacji, że Konwersacja została zakończona. Wiadomości, Service Broker wysyła do zdalnej usługa zależą od opcji określonych:

  • If the conversation ends without errors, and the conversation to the remote service is still active, Service Broker sends a message of type https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog to the remote service.Service Broker adds this message to the transmission queue in conversation order.Service Broker sends all messages for this conversation that are currently in the transmission queue before sending this message.

  • If the conversation ends with an error and the conversation to the remote service is still active, Service Broker sends a message of type https://schemas.microsoft.com/SQL/ServiceBroker/Error to the remote service.Service Broker drops any other messages for this conversation currently in the transmission queue.

  • klauzula WITH oczyszczania umożliwia administratorowi bazy danych usunąć konwersacji, których nie można ukończyć normalnie.Ta opcja usuwa wszystkie wiadomości i zapisy katalogu do konwersacji.Należy zauważyć, że w takim przypadek strony zdalnej komunikacji odbiera nie wskazuje na Konwersacja została zakończona i nie może odbierać wiadomości, które zostały wysłane przez aplikację, ale nie zostały jeszcze przesłane przez sieć.Tę opcję, należy unikać, chyba, że do konwersacji nie można ukończyć normalnie.

Po zakończeniu konwersacji, Transact-SQL SEND powoduje, że instrukcja, która określa dojście konwersacji Transact-SQL Wystąpił błąd. Jeśli nadejścia wiadomości do tej konwersacji w drugą stronę do konwersacji Service Broker powoduje odrzucenie tych wiadomości.

Jeżeli konwersacji kończy się w czasie, gdy nie zdalnej usługi nadal zostało wysłane wiadomości w konwersacji, usługa zdalnego obniży się niewysłane wiadomości.To nie jest uważana za błąd, a usługa zdalnego otrzymuje żadnego powiadomienie opuszczonych wiadomości.

Kody awarii określone w klauzula WITH błąd muszą być liczbami dodatnimi.Liczby ujemne są zarezerwowane dla Service Broker komunikaty o błędach. Aby uzyskać więcej informacji na temat Service Broker komunikaty o błędach, zobacz Komunikaty systemu brokera.

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

Uprawnienia

Aby zakończyć konwersację aktywne, bieżący użytkownik musi być właścicielem konwersacji, jest członkiem roli sysadmin stałych serwera lub członkiem db_owner stała rola bazy danych.

element członkowski członkowski sysadmin stałych roli serwera lub element członkowski członkowski roli db_owner stałej bazy danych może usunąć metadane dla konwersacji, która została już zakończona za pomocą oczyszczania WITH.

Przykłady

A.Kończenie konwersacji

W poniższym przykładzie kończy się okno dialogowe, określony przez @dialog\_handle.

END CONVERSATION @dialog_handle ;

B.Kończenie konwersacji z powodu błędu

W poniższym przykładzie kończy się okno dialogowe, określony przez @dialog\_handle z powodu błędu, jeśli w instrukcja przetwarzania zgłasza błąd. Należy zauważyć, że jest to simplistic podejście do obsługa błędów i może nie być odpowiedni 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, których nie można ukończyć normalnie

The following example ends the dialog specified by @dialog\_handle.SQL Server immediately removes all messages from the service queue and the transmission queue, without notifying the remote service.Ponieważ kończące się okno dialogowe z oczyszczania nie powiadamia usługę zdalnego, należy używać tylko to w przypadkach, gdy usługa zdalnego nie jest dostępny do odbierania EndDialog or Błąd wiadomości.

END CONVERSATION @dialog_handle WITH CLEANUP ;