Condividi tramite


Procedura: Recupero di informazioni da un messaggio di errore di Service Broker (Transact SQL)

Un messaggio di tipo https://schemas.microsoft.com/SQL/ServiceBroker/Error costituisce un messaggio di errore di Service Broker. I messaggi di questo tipo sono documenti XML contenenti un codice numerico e una descrizione dell'errore.

Per recuperare le informazioni da un messaggio di errore di Service Broker

  1. Dichiarare una variabile di tipo int per la memorizzazione del codice di errore.

  2. Dichiarare una variabile di tipo nvarchar(3000) per la memorizzazione della descrizione dell'errore.

  3. Dichiarare una variabile di tipo xml per la memorizzazione di una rappresentazione XML del corpo del messaggio.

  4. Utilizzare la funzione CAST per convertire il corpo del messaggio da varbinary(max) in xml e assegnare i risultati alla variabile di tipo xml.

  5. Utilizzare la funzione value del tipo di dati xml per recuperare il codice di errore.

  6. Utilizzare la funzione value del tipo di dati xml per recuperare la descrizione dell'errore.

  7. Gestire l'errore nel modo più appropriato per l'applicazione. Gli errori con codici negativi vengono generati da Service Broker mentre quelli con codici positivi vengono generati dai programmi del servizio.

Esempio

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

Vedere anche

Concetti

Messaggi di Service Broker

Altre risorse

Nozioni fondamentali su XQuery

Guida in linea e informazioni

Assistenza su SQL Server 2005