Anvisningar: Hämta information från ett Service Broker-felmeddelande (Transact SQL)

gäller för:SQL ServerAzure SQL Managed Instance

Ett meddelande av typen https://schemas.microsoft.com/SQL/ServiceBroker/Error är ett service broker-felmeddelande. Meddelanden av den här typen är XML-dokument som innehåller en numerisk kod för felet och en beskrivning av felet.

Hämta informationen från ett service broker-felmeddelande

  1. Deklarera en variabel av typen int för att lagra felkoden.

  2. Deklarera en variabel av typen nvarchar(3000) för att lagra felbeskrivningen.

  3. Deklarera en variabel av typen xml för att lagra en XML-representation av meddelandetexten.

  4. CAST meddelandetexten från varbinary(max) till xml och tilldela resultatet till variabeln av typen xml.

  5. Använd värdefunktionen för xml-datatypen för att hämta felkoden.

  6. Använd värdefunktionen för xml-datatypen för att hämta felbeskrivningen.

  7. Hantera felet efter behov för ditt program. Fel med negativa felkoder genereras av Service Broker. Fel med positiva felkoder genereras av tjänstprogram som körde END CONVERSATION WITH ERROR.

Examples

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