Freigeben über


Vorgehensweise: Abrufen von Informationen aus einer Service Broker-Fehlermeldung (Transact SQL)

Gilt für:SQL ServerAzure SQL Managed Instance

Eine Meldung vom Typ https://schemas.microsoft.com/SQL/ServiceBroker/Error ist eine Service Broker-Fehlermeldung. Nachrichten dieses Typs sind XML-Dokumente, die einen numerischen Code für den Fehler und eine Beschreibung des Fehlers enthalten.

Abrufen der Informationen aus einer Service Broker-Fehlermeldung

  1. Deklarieren Sie eine Variable vom Typ "int ", um den Fehlercode zu enthalten.

  2. Deklarieren Sie eine Variable vom Typ nvarchar(3000), um die Fehlerbeschreibung aufzunehmen.

  3. Deklarieren Sie eine Variable vom Typ XML , um eine XML-Darstellung des Nachrichtentexts zu enthalten.

  4. CAST der Nachrichtentext von varbinary(max) zu xml, und weisen Sie die Ergebnisse der Variablen vom Typ XML zu.

  5. Verwenden Sie die Wertfunktion des XML-Datentyps , um den Fehlercode abzurufen.

  6. Verwenden Sie die Wertfunktion des XML-Datentyps , um die Fehlerbeschreibung abzurufen.

  7. Verarbeiten Sie den Fehler auf eine für Ihre Anwendung geeignete Weise. Fehler mit negativen Fehlercodes werden von Service Broker erzeugt. Fehler mit positiven Fehlercodes werden von Dienstprogrammen generiert, die ausgeführt wurden 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