Aracılığıyla paylaş


Nasıl yapılır: Hizmet Aracısı hata iletisinden bilgi almak (Transact SQL)

Bir ileti türü https://schemas.microsoft.com/SQL/ServiceBroker/Error olan bir Service Broker hata iletisi.Bu tür iletileri, hata ve hata açıklaması için sayısal bir kod içeren xml belgeleridir.

Hizmet Aracısı hata iletisinden bilgi almak için

  1. Random türünde bir değişken int yerleştirileceği hata kodu.

  2. Random türünde bir değişken nvarchar(3000) yerleştirileceği hata açıklaması.

  3. Random türünde bir değişken xml için basılı bir xml betimlemesi ileti gövdesi.

  4. İleti gövdesinden ARTIĞINI varbinary(max) için xml, sonuçlar türü değişkenine atayın ve xml.

  5. Use value işlev, xml veri türü almak hata kodu.

  6. Use value işlev, xml veri türü almak hata açıklaması.

  7. Uygulamanız için uygun hata işlemek.Negatif hata kodları hatalarla tarafından üretilen Service Broker.Pozitif hata kodları ile hataları hata ile son konuşma bitti hizmet programları tarafından oluşturulur.

Örnek

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

Ayrıca bkz.

Kavramlar

Diğer Kaynaklar