Procédure : récupérer des informations à partir d'un message d'erreur Service Broker (Transact SQL)

Un message de type https://schemas.microsoft.com/SQL/ServiceBroker/Error est un message d'erreur Service Broker. Des messages de ce type sont des documents XML contenant une description de l'erreur et un code numérique pour celle-ci.

Pour récupérer les informations figurant dans un message d'erreur Service Broker

  1. Déclarez une variable de type int pour connaître le code de l'erreur.

  2. Déclarez une variable de type nvarchar(3000) pour prendre connaissance de la description de l'erreur.

  3. Déclarez une variable de type xml pour vous procurer une version XML du corps du message.

  4. Convertissez (CAST) le corps du message pour passer du type varbinary(max) au type xml, puis attribuez les résultats à la variable de type xml.

  5. Utilisez la fonction value du type de données xml pour récupérer le code de l'erreur.

  6. Utilisez la fonction value du type de données xml pour récupérer la description de l'erreur.

  7. Corrigez l'erreur comme il convient pour votre application. Les codes d'erreur négatifs sont générés par Service Broker et les codes d'erreur positifs, par les programmes de services.

Exemple

-- 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

Voir aussi

Concepts

Messages Service Broker

Autres ressources

Concepts de base de XQuery

Aide et Informations

Assistance sur SQL Server 2005