Service Broker エラー メッセージから情報を取得する方法 (Transact SQL)
https://schemas.microsoft.com/SQL/ServiceBroker/Error 型のメッセージは、Service Broker のエラー メッセージです。この型のメッセージは、エラーの数値コードとエラーの説明を含む XML ドキュメントです。
Service Broker エラー メッセージから情報を取得するには
int 型の変数を宣言して、エラー コードを保持します。
nvarchar(3000) 型の変数を宣言して、エラーの説明を保持します。
xml 型の変数を宣言して、メッセージ本文の XML 表現を保持します。
メッセージの本文を varbinary(max) から xml にキャストして、結果を xml 型の変数に代入します。
xml データ型の value 関数を使用して、エラー コードを取得します。
xml データ型の value 関数を使用して、エラーの説明を取得します。
アプリケーションのニーズに応じてエラーを処理します。負のエラー コードを持つエラーは Service Broker によって生成されます。正のエラー コードを持つエラーは、END CONVERSATION WITH ERROR を実行したサービス プログラムによって生成されます。
使用例
-- 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