RAISERROR kullanma

Uygulamaları, bir sistem hatası aynı biçimi kullanan veya uyarı iletisi tarafından oluşturulan iletileri geri dönmek için kullanılan RAISERROR SQL Server Database Engine.

RAISERROR ya da geri dönebilirsiniz:

  • Sp_addmessage sistem kullanılarak oluşturulan BIR kullanıcı tanımlı bir hata iletisi saklı yordamını.Bunlar sys.messages katalog görünümde görüntülenebilir 50000'dan büyük bir ileti numarası ile iletilerdir.

  • Bir iletinin RAISERROR deyim içinde belirtilen dize.

RAISERROR ayrıca şunları da yapabilirsiniz:

  • Bir özel hata numarası önem ve durumu atayın.

  • Hata günlüğe isteği Database Engine hata günlüğü ve Microsoft Windows Uygulama günlüğüne.

  • Iletinin metne çok C dili gibi bağımsız değişkeni değerleri değiştirin. printf_s işlev.

RAISERROR hem PRINT bilgi veya uyarı iletileri, bir uygulamaya dönmek için kullanılır.PRINT yalnızca bir karakter veya karakter ifade döndürebilir, ancak dize değiştirme C standart kitaplığı printf_s işlevine benzer işlevleri kullanarak RAISERROR tarafından döndürülen ileti metnini yerleşik.11 19 Bir TRY…CATCH yapýsý TRY bloğunun yürütülmesi için BIR RAISERROR önem için ilgili CATCH blok transfer etmek, Denetim neden olur.Iletileri bir CATCH blok yürütmesini olmadan RAISERROR kullanarak geri dönmek için bir önem 10 veya daha düşük belirtin.PRINT bir CATCH blok için Denetim aktarılmaz.

RAISERROR ile kullanıldığında msg_id bir kullanıcı tanımlı iletisinde sys.messages, msg_id olarak döndürülen SQL Server hata numarasını veya yerel bir hata kodu. RAISERROR ile kullanıldığında bir msg_str yerine bir msg_id, SQL Server Döndürülen hata numarası ve yerel hata 50000 sayıdır.

Bir kullanıcı tanımlı bir hata iletisi geri dönmek için RAISERROR kullandığınızda, bir farklı il numarası, hata başvuran her RAISERROR içinde kullanın.Bu işlem, yükseltilmiş, hataları tanılama yardımcı olabilir.

RAISERROR için kullanın:

  • Sorun gidermede yardımcı olur. Transact-SQL Kod.

  • Veri değerlerini denetleyin.

  • Değişken bir metin içeren iletiler döndürür.

  • TRY blok ilişkili CATCH blok atlamak yürütme neden.

  • Hata bilgisi CATCH blok, arama toplu iş iş iş veya uygulama döndürür.

Aşağıdaki örnek değerler ile karşılaştığında yerine koyduğu DB_ID() ve DB_NAME() uygulamaya geri gönderilen iletide işlevleri:

DECLARE @DBID INT;
SET @DBID = DB_ID();

DECLARE @DBNAME NVARCHAR(128);
SET @DBNAME = DB_NAME();

RAISERROR
    (N'The current database ID is:%d, the database name is: %s.',
    10, -- Severity.
    1, -- State.
    @DBID, -- First substitution argument.
    @DBNAME); -- Second substitution argument.
GO

Bu örnek, kullanıcı tanımlı bir iletiyi kullanarak aynı bilgileri sağlar.

EXECUTE sp_dropmessage 50005;
GO
EXECUTE sp_addmessage 50005, -- Message id number.
    10, -- Severity.
    N'The current database ID is: %d, the database name is: %s.';
GO
DECLARE @DBID INT;
SET @DBID = DB_ID();

DECLARE @DBNAME NVARCHAR(128);
SET @DBNAME = DB_NAME();

RAISERROR (50005,
    10, -- Severity.
    1, -- State.
    @DBID, -- First substitution argument.
    @DBNAME); -- Second substitution argument.
GO

Aşağıdaki kod örneği RAISERROR TRY blok ilgili CATCH blok atlamak yürütme neden nasıl kullanıldığını gösterir.Ayrıca, RAISERROR bir CATCH blok çağıran bir hata hakkında bilgi almak için nasıl kullanılacağını gösterir.

Not

RAISERROR, 1 ile 127 yalnızca durumu ile hatalara neden olabilir.Çünkü Database Engine hatalara neden olabilir durumu 0 ile bunu bir değeriyle RAISERROR Durum parametresini geçirmeden önce ERROR_STATE tarafından döndürülen hata durumunu denetlemenizi öneririz.

BEGIN TRY
    -- RAISERROR with severity 11-19 will cause execution to 
    -- jump to the CATCH block
    RAISERROR ('Error raised in TRY block.', -- Message text.
               16, -- Severity.
               1 -- State.
               );
END TRY
BEGIN CATCH
    DECLARE @ErrorMessage NVARCHAR(4000);
    DECLARE @ErrorSeverity INT;
    DECLARE @ErrorState INT;

    SELECT @ErrorMessage = ERROR_MESSAGE(),
           @ErrorSeverity = ERROR_SEVERITY(),
           @ErrorState = ERROR_STATE();

    -- Use RAISERROR inside the CATCH block to return 
    -- error information about the original error that 
    -- caused execution to jump to the CATCH block.
    RAISERROR (@ErrorMessage, -- Message text.
               @ErrorSeverity, -- Severity.
               @ErrorState -- State.
               );
END CATCH;