共用方式為


如何:從 Service Broker 錯誤訊息擷取資訊 (Transact SQL)

類型 https://schemas.microsoft.com/SQL/ServiceBroker/Error 的訊息是 Service Broker 錯誤訊息。此類型的訊息都是包含錯誤數字代碼及錯誤描述的 XML 文件。

若要從 Service Broker 錯誤訊息擷取資訊

  1. 宣告類型為 int 的變數以保存錯誤碼。

  2. 宣告類型為 nvarchar(3000) 的變數以保存錯誤描述。

  3. 宣告類型為 xml 的變數以保存訊息主體的 XML 表示。

  4. 將訊息主體從 varbinary(max) 轉換至 xml,並將結果指派給類型為 xml 的變數。

  5. 使用 xml 資料類型的 value 函數擷取錯誤碼。

  6. 使用 xml 資料類型的 value 函數擷取錯誤描述。

  7. 處理適合您應用程式的錯誤。具有負數錯誤碼的錯誤是由 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

請參閱

概念

其他資源