Udostępnij za pośrednictwem


Jak Pobieranie informacji z jest komunikat o błędzie usługa Broker (Transact SQL)

Wiadomości tego typu https://schemas.Microsoft.com/SQL/ServiceBroker/Error is a Service Broker komunikat o błędzie. Wiadomości tego typu są dokumentów XML, które zawierają wartość kodu liczbowego błąd i opis błędu.

Aby pobrać informacje z komunikat o błędzie usługa Broker

  1. Deklaruje zmienną typu int do przechowywania kodu błędu.

  2. Deklaruje zmienną typu nvarchar(3000) do przechowywania opis błędu.

  3. Deklaruje zmienną typu xml do przechowywania reprezentacji XML w treści wiadomości.

  4. Treść wiadomości z LANE varbinary(max) Aby xmli przypisać do zmiennej typu wyniki xml.

  5. Użycie value Funkcja xml Typ danych do pobierania kodu błędu.

  6. Użycie value Funkcja xml Typ danych w celu pobrania opis błędu.

  7. Obsługi błędu odpowiednie dla danej aplikacji.Błędy z kodów błędów ujemne są generowane przez Service Broker. Błędy z kodów błędów dodatnie są generowane przez programy usługa, które uruchomiono KONWERSACJI END WITH błąd.

Example

-- The variables to hold the error code and the description are
-- provided by the caller.

CREATE PROCEDURE [ExtractBrokerError]
  ( @message_body VARBINARY(MAX),
    @code int OUTPUT,
    @description NVARCHAR(3000) OUTPUT )
AS
BEGIN

-- Declare a variable to hold an XML version of the message body.

DECLARE @xmlMessage XML;

-- CAST the provided message body to XML.

SET @xmlMessage = CAST(@message_body AS XML);
SET @code = @@ERROR

IF @@ERROR<>0
  RETURN @code

-- Retrieve the error code from the Code element.

SET @code = (
      SELECT @xmlMessage.value(
        N'declare namespace
           brokerns="https://schemas.microsoft.com/SQL/ServiceBroker/Error";
               (/brokerns:Error/brokerns:Code)[1]', 
        'int')
        );

-- Retrieve the description of the error from the Description element.

SET @description = (
      SELECT @xmlMessage.value(
        'declare namespace
           brokerns="https://schemas.microsoft.com/SQL/ServiceBroker/Error";
           (/brokerns:Error/brokerns:Description)[1]', 
        'nvarchar(3000)')
        );


RETURN 0;

END
GO