Aracılığıyla paylaş


RAISERROR kullanma

RAISERROR uyarı iletisi tarafından üretilen veya bir sistem hatası aynı biçimi kullanan uygulamalar iletileri geri dönmek için kullanılan SQL Server Veritabanı Altyapısı.

RAISERROR ya da dönebilirsiniz:

  • Kullanılarak oluşturulan bir kullanıcı tanımlı hata iletisi sp_addmessage sistem saklı yordamı.İletileri görüntülenebilir 50000'den daha büyük bir ileti numarası ile bunlar sys.messages Katalog görünümü.

  • RAISERROR deyim içinde belirtilen ileti dize.

RAISERROR de yapabilirsiniz:

  • Belirli hata numarası, önem ve durumu atayın.

  • Hata günlüğe, istek Veritabanı Altyapısı hata günlüğü ve Microsoft Windows Uygulama günlüğünü

  • Bağımsız değişken değerleri yerine c dilinin çok benzer bir ileti metni içine printf_s işlev.

RAISERROR hem baskı uygulamaya bilgi veya uyarı iletileri döndürmek için kullanılır.RAISERROR tarafından döndürülen ileti metni yazdırma yalnızca bir karakter dize veya karakter ifade dönebilirsiniz ama c standart kitaplığı, printf_s işlevine benzer dize değiştirme işlev kullanılarak oluşturulabilir.11 19 try yürütülen için bir RAISERROR önem blok , bir try…catch yapı nedenleri denetim için ilişkili catch aktarmak için blok.Bir catch çağırmadan RAISERROR kullanarak iletileri döndürmek için bir önem 10 veya daha düşük düzeydeki belirtmek blok.Baskı değil aktarım denetimi için bir catch blok.

Ne zaman RAISERROR birlikte kullanılırsa msg_id , bir kullanıcı tanımlı ileti sys.messages, msg_id olarak döndürülen SQL Server hata numarasını veya yerel hata kodu.Ne zaman RAISERROR birlikte kullanılırsa bir msg_str yerine bir msg_id, SQL Server hata numarasını ve hata numarası verilir 50000.

RAISERROR bir kullanıcı tanımlı hata iletisi döndürmek için kullanıyorsanız, bu hata başvuran her RAISERROR farklı durum numarasını kullanın.Bu, toplamış zaman hata tanılamada yardımcı olabilir.

RAISERROR için kullanın:

  • Sorun gidermede yardımcı Transact-SQL kod.

  • Veri değerlerini denetleyin.

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

  • Bir try atlamak yürütülmesine neden blok için ilişkili catch blok.

  • catch hata bilgilerini dönmek blok arama toplu iş iş veya uygulama için.

Aşağıdaki örnek, değerleri değiştirir DB_ID() ve DB_NAME() gönderilen bir ileti işlevlerini yedeklemek için uygulama:

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, bir kullanıcı tanımlı ileti 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 nasıl bir try içinde RAISERROR kullanılacağını gösterir blok için ilişkili catch atlamak yürütülmesine neden blok.Ayrıca RAISERROR çağrılan bir catch hata hakkında bilgi almak için nasıl kullanılacağını gösterir blok.

Not

RAISERROR 1 ile 127 arasında yalnızca durumu ile hatalara neden olabilir.Çünkü Veritabanı Altyapısı hatalara neden olabilir durumu 0 değeri olarak RAISERROR durum parametresi 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;