Vorgehensweise: Abrufen von Informationen aus einer Service Broker-Fehlermeldung (Transact-SQL)
Eine Nachricht 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.
So rufen Sie die Informationen aus einer Service Broker-Fehlermeldung ab
Deklarieren Sie eine Variable des Typs int, die den Fehlercode enthält.
Deklarieren Sie eine Variable des Typs nvarchar(3000), die die Fehlerbeschreibung enthält.
Deklarieren Sie eine Variable des Typs xml, die eine XML-Darstellung des Nachrichtentextes enthält.
Wandeln Sie den Nachrichtentext von varbinary(max) in xml um, und weisen Sie die Ergebnisse der Variablen des Typs xml zu.
Verwenden Sie die Funktion value des Datentyps xml, um den Fehlercode abzurufen.
Verwenden Sie die Funktion value des Datentyps xml, um die Fehlerbeschreibung abzurufen.
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 erzeugt, in denen die END CONVERSATION WITH ERROR-Anweisung ausgeführt wurde.
Beispiel
-- 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