如何:從 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 產生,而具有正數錯誤碼的錯誤則由服務程式產生。
範例
-- 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