Udostępnij za pośrednictwem


Jak Pobieranie informacji z komunikatem o błędzie Service Broker (Transact SQL)

Wiadomości tego typu https://schemas.microsoft.com/SQL/ServiceBroker/Error jest Service Broker komunikat o błędzie.Wiadomości tego typu są dokumenty XML, które zawierają kod numeryczny błąd i opis błędu.

Aby pobrać informacje z komunikatem o błędzie Service 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 reprezentację XML treści wiadomości.

  4. RZUTOWANIE treści wiadomości z varbinary(max) do xmli przypisać do zmiennej typu wyniki xml.

  5. Użyj value funkcja xml Typ danych do pobierania kodu błędu.

  6. Użyj value funkcja xml Typ danych do pobierania opis błędu.

  7. Obsługi błędu odpowiednie dla aplikacji.Kody błędów ujemnych błędów są generowane przez Service Broker.Błędy z kodami błędów dodatnie są generowane przez usługa programy, które uruchomiono celu KONWERSACJI Z błędu.

Przykład

-- 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

Zobacz także

Koncepcje

Inne zasoby