Aracılığıyla paylaş


RAISERROR (Transact-SQL)

Bir hata iletisi oluşturur ve bu oturum için hata işleme'nı başlatır.RAISERROR saklanan kullanıcı tanımlı bir ileti ya da başvuru yapabilirsiniz sys.Messages görünümü katalog oluşturmak veya bir iletinin dinamik olarak oluşturmak.Iletinin, çağıran uygulama veya bir TRY…CATCH yapýsý ilişkili bir CATCH blok sunucu hata iletisi döndürülür.

Topic link iconTransact-SQL sözdizimi kuralları

RAISERROR ( { msg_id | msg_str | @local_variable }
    { ,severity ,state }
    [ ,argument [ ,...n ] ] )
    [ WITH option [ ,...n ] ]

Bağımsız değişkenler

  • msg_id
    Bir kullanıcı tanımlı bir hata iletisi numarasını depolanan iş sys.Messages kullanarak kataloğunu görüntülemesp_addmessage.Kullanıcı tanımlı hata iletileri için hata numaraları 50000 ' büyük olmalıdır.Ne zaman msg_id belirtilmemişse, RAISERROR ile 50000 numaralı hata, hata iletisi oluşturur.

  • msg_str
    Biçimlendirmeye sahip bir kullanıcı tarafından tanımlanan ileti benzer mi printf Standart C Kitaplığı işlev. Hata iletisi, en çok 2,047 karakter olabilir.Iletinin 2.048 ya da daha fazla karakter içeriyorsa, yalnızca ilk 2,044 görüntülenir ve iletinin kesildi belirtmek için üç nokta eklenir.Not değiştirme parametreleri, çıkış iç depolama davranışı nedeniyle gösterir çok fazla karakter kullanır.Örneğin, yerine koyma parametresi %d 2 atanmış bir değerle, gerçekten iletideki bir karakter üretir dize ancak dahili olarak da depolama üç ek karakterler kadar sürer. Bu depolama gereksinimi, iletinin çıkış için kullanılabilir karakter sayısını azaltır.

    Ne zaman msg_str , RAISERROR harekete geçiren, bir hata iletisi ile 50000 hata sayısı belirtildi.

    msg_str bir isteğe bağlı ve katıştırılmış dönüştürme özellikleri olan bir karakter dizesidir.Her bir dönüştürme belirtimi bağımsız değişken listesindeki bir değeri biçimlendirilmiş ve diğer konumunda dönüştürme belirtiminin bir alana yerleştirilebilir nasıl tanımlar. msg_str. Dönüştürme özellikleri, bu biçimi vardır:

    % [[flag] [width] [. precision] [{h | l}]type

    Kullanılabilir parametreleri msg_str şunlardır:

  • flag

    Boşluk ve değiştirilen değeri, bloklama tanımlayan bir kod belirtilir.

    Code

    Önek veya iki yana yaslama

    Açıklama

    -(eksi)

    Sola yaslı

    Sola Yasla bağımsız değişken değeri içinde belirli bir alan genişliği.

    + (artı)

    Işareti öneki

    Artı bağımsız değişken değeri yazın (+) veya eksi (-) değeri, imzalanmış bir tür.

    0 (sıfır)

    Sıfır dolgusu

    En küçük genişliğe ulaşıncaya kadar sıfırlarla çıkış yazın.0, 0 Ve eksi işareti (-) göründüğünde, göz ardı edilir.

    # (sayı)

    0 x olan onaltılı düzende tür öneki x X veya

    Sayı işareti (#flag), sıfır olmayan herhangi bir değer 0, 0 x veya 0 x, X veya biçimi, o kullanıldığında prefaces sırasıyla X.G, i veya u başında sayı işareti (#flag), bayrak yoksayıldı.

    ' ' (boş)

    Alanını doldurma

    Imzalı ve pozitif değer ise, boşluk ile Çıkış değeri yazın.Artı işaretini (+) bayrağıyla dahil olduğunda bu göz ardı edilir.

  • width

    En küçük genişlik için bağımsız değişken değeri yerleştirildiği alan tanımlayan bir tamsayı olarak belirtilir.Bağımsız değişken değerinin uzunluğu değerine eşit veya daha uzunsa width, değer içeren hiçbir doldurma yazdırılır. Daha kısa bir değer ise width, değer, belirtilen uzunluk olarak sıfır width.

    Yıldız işareti (*), genişliği bir tamsayı olması gereken bağımsız değişken listesinde ilişkili bağımsız değişkeni tarafından belirtilen anlamına gelir.

  • precision

    En fazla bağımsız değişken değeri dize değerleri için alınan karakter sayısıdır.Örneğin, bir dize beş karakter ve duyarlık 3 ise, yalnızca ilk üç karakter dizesi değeri kullanılır.

    Tamsayı değerler için precision en az yazdırılan basamak sayısıdır.

    Yıldız işareti (*) duyarlığı bir tamsayı olması gereken bağımsız değişken listesinde ilişkili bağımsız değişkeni tarafından belirtilen anlamına gelir.

  • {h | l} type

    Karakter türleri d ile kullanılır i, o, s, x, X veya u, oluşturur shortint (h) or longint (l) değerleri.

    Tür belirtimi

    Temsil eder.

    d veya i

    Imzalı tamsayı

    o

    Sekizli imzalanmamış.

    s

    Dize

    u

    Işaretsiz tamsayı

    x ya da X

    Imzalanmamış onaltılı

    Not

    Bu tür belirtimleri için ilk olarak tanımlanmış olanları dayalı printf Standart C Kitaplığı işlev. RAISERROR ileti dize eşlemesi için kullanılan türü belirtimleri Transact-SQL veri türleri, çalışırken kullanılan belirtimleri printf C dil veri türleri eşleştirin. Kullanılan türü belirtimleri printf RAISERROR tarafından desteklenmez, Transact-SQL ilişkili C veri türü için benzer bir veri türüne sahip değil. Örneğin, %p işaretçiler belirtimi içinde RAISERROR desteklenmiyor Transact-SQL bir işaretçi veri türüne sahip değil.

    Not

    To convert a value to the Transact-SQLbigint data type, specify %I64d.

  • **@**local_variable
    Aynı şekilde biçimlendirilmiş bir dize içeren herhangi bir geçerli karakter veri türünün bir değişken mi msg_str. **@**local_variable must be char veya varchar, veya bu veri türleri için örtülü olarak dönüştürülmesi.

  • severity
    Bu iletiyle ilişkili olarak kullanıcı tanımlı önem düzeyinde alır.Kullanırken msg_id kullanılarak oluşturulan kullanıcı tanımlı bir ileti oluşturmak için sp_addmessage içinde belirtilen önem RAISERROR üzerinde belirtilen önem geçersiz kılarsp_addmessage.

    Önem derecelerine 18 ile 0 arasında herhangi bir kullanıcı tarafından belirlenebilir.19-25'Den önem derecelerine üyeleri tarafından yalnızca belirtilebilir sysadmin , ALTER IZLEME izinlerine sahip sunucu rolü veya kullanıcıların sabit.19-25 Önem derecelerine için WITH LOG seçeneği gereklidir.

    Uyarı

    20-25 Önem derecelerine önemli olarak düşünülür.Önemli önem düzey karşılaşılırsa, iletiyi aldıktan sonra istemci bağlantı sonlandırıldı ve bu hata hata ve uygulama günlüklerinde günlüğe kaydedilir.

    Not

    Önem derecesi 0, 0 yorumlanır daha az düzeyler.25 ' Büyük önem derecelerine 25 yorumlanır.

  • state
    0 Ile 255 arasında bir tamsayı olarak belirtilir.Değerler veya 255 hata oluşturmak daha büyük olan değerler negatif.

    Birden çok yerleşimleri için aynı kullanıcı tanımlı hata ortaya çıkar, her konum için bir benzersiz il numarası kullanarak kodun hangi bölümünde hataları yükseltme, Bul yardımcı olabilir.

  • argument
    Değiştirme değişkenleri için kullanılan parametreler tanımlanan msg_str veya karşılık gelen ileti msg_id. 0 Ya da daha fazla değiştirme parametreleri olabilir, ancak yerine koyma parametre sayısı 20 aşamaz.Her yerine koyma parametresi, yerel bir değişkene veya bu veri türlerinden biri olabilir: tinyint, smallint, int, char, varchar, nchar, nvarchar, binary, veya varbinary. Diğer veri türleri desteklenir.

  • option
    Hata için özel bir seçenek için iş ve aşağıdaki tablodaki değerlerden biri olabilir.

    Değer

    Açıklama

    GÜNLÜK

    Logs the error in the error log and the application log for the instance of the Microsoft SQL Server Database Engine.Hata günlüğüne hatalar için en çok 440 bayt şu anda sınırlıdır.Yalnızca bir üyesi sysadmin sabit sunucu rolü veya ALTER IZLEME izinlere sahip bir kullanıcı, WITH LOG belirtebilirsiniz.

    nowait

    Iletileri hemen istemciye gönderir.

    seterror

    @@ ERROR ve ERROR_NUMBER değerlere ayarlar. msg_id veya önem düzey ne olursa olsun, 50000.

Remarks

RAISERROR ile oluşturulan hata tarafından oluşturulan hatalar aynı işletmek Database Engine kodu. RAISERROR tarafından belirtilen değerleri ERROR_LINE ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY, ERROR_STATE ve @@ ERROR sistem işlevleri tarafından bildirilir.RAISERROR 11 ya da bir TRY bloğuna daha yüksek bir önem derecesi ile çalıştırıldığında, denetim için ilgili CATCH blok aktarır.RAISERROR çalıştırılırsa, hata çağırana döndürülür:

  • Dışında herhangi bir TRY kapsamını engelleyin.

  • Bir önem 10 veya daha düşük bir TRY blok içinde ile.

  • 20 Veya daha yüksek önem derecesi ile veritabanı bağlantısını sona erdirir.

CATCH blok RAISERROR CATCH blok, özgün hata bilgilerini almak için sistem işlevleri ERROR_NUMBER ve ERROR_MESSAGE kullanılarak çağrılan bir hata rethrow için kullanabilirsiniz.@@ ERROR 0'a bir önem sahip iletiler için varsayılan değer olarak 1 ile 10 arasında küme.Daha fazla bilgi için bkz:Kullanarak TRY... CATCH Transact-SQL'DE.

Ne zaman msg_id bir kullanıcı tarafından tanımlanan ileti kullanılabilir belirtir sys.Messages Katalog görünümü kullanılarak belirtilen kullanıcı tanımlı bir iletinin metne uygulanan aynı kuralları kullanarak metin sütun iletiden RAISERROR işler.msg_str. Kullanıcı tanımlı bir ileti metni dönüştürme belirtimleri içerebilir ve RAISERROR bağımsız değişkeni değerleri dönüştürme belirtimleri ile eşler.Kullanımı sp_addmessage Kullanıcı tanımlı hata iletileri ve sp_dropmessage , kullanıcı tanımlı hata iletileri de silinecek.

RAISERROR uygulamalar'ı çağırmak için iletileri geri dönmek için PRINT alternatif olarak kullanılabilir.Karakter değiştirme işlevselliği için de benzer RAISERROR destekleyen printf C standart kitaplığı fonksiyonunda çalışırken Transact-SQL PRINT deyim desteklemez. Bir RAISERROR çalışma için 11 19 bir TRY blok içinde bir önem derecesi ile ilgili CATCH blok denetim aktarımları sırasında TRY blok, PRINT deyim etkilenmemektedir.RAISERROR CATCH blok yürütmesini olmadan, bir TRY bloğuna iletiye dönmek için kullanılacak bir önem 10 veya daha düşük belirtin.

Genellikle, birbirini izleyen bağımsız değişkenleri art arda dönüştürme özellikleri değiştirin; ilk bağımsız değişkenin ilk dönüştürme belirtimini değiştirir, ikinci bağımsız değişken ikinci dönüştürme belirtimi ve benzeri değiştirir.Örneğin, aşağıdaki RAISERROR ilk bağımsız değişken olarak Ekstresi N'number' ilk dönüştürme belirtimini değiştirir. %s; ve, ikinci bağımsız değişken 5 ikinci dönüştürme belirtimini değiştirir. %d.

RAISERROR (N'This is message %s %d.', -- Message text.
           10, -- Severity,
           1, -- State,
           N'number', -- First argument.
           5); -- Second argument.
-- The message text returned is: This is message number 5.
GO

Genişlik veya duyarlık bir dönüştürme belirtimi için bir yıldız işareti (*) belirtilirse, bir bağımsız değişken tamsayı genişlik veya duyarlık için kullanılacak değeri belirtildi.Bu durumda, bir dönüştürme belirtimi, en çok üç bağımsız değişkeni, her biri için Genişlik, duyarlık ve yerine koyma değerini kullanabilirsiniz.

Örneğin, aşağıdakilerin her ikisi de RAISERROR ifadeler aynı dizesini döndürür. Bir bağımsız değişken listesindeki genişlik ve duyarlık değerleri belirtir; diğer dönüştürme belirtiminde belirtir.

RAISERROR (N'<<%*.*s>>', -- Message text.
           10, -- Severity,
           1, -- State,
           7, -- First argument used for width.
           3, -- Second argument used for precision.
           N'abcde'); -- Third argument supplies the string.
-- The message text returned is: <<    abc>>.
GO
RAISERROR (N'<<%7.3s>>', -- Message text.
           10, -- Severity,
           1, -- State,
           N'abcde'); -- First argument supplies the string.
-- The message text returned is: <<    abc>>.
GO

Örnekler

C.Hata bilgisi bir CATCH blok döndürülüyor.

Aşağıdaki kod örneği nasıl kullanacağınızı gösterir. RAISERROR içinde bir TRY Yürütme ilişkili atlamak neden engelleme CATCH blok. Nasıl kullanılacağını gösterir... RAISERROR çağıran bir hata hakkında bilgi için CATCH blok.

Not

RAISERROR yalnızca 1 ile 127 arasında hata durumu ile oluşturur.Çü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;

b.Ad hoc iletisine sys.messages oluşturma

Aşağıdaki örnek, depolanan ileti artýrmak için gösterilmiştir sys.Messages kataloğunu görüntüleyin.Iletiye eklenmiş olan sys.Messages kullanarak Katalog görünümüsp_addmessage sistem saklı yordamı ileti numarası 50005.

sp_addmessage @msgnum = 50005,
              @severity = 10,
              @msgtext = N'<<%7.3s>>';
GO
RAISERROR (50005, -- Message id.
           10, -- Severity,
           1, -- State,
           N'abcde'); -- First argument supplies the string.
-- The message text returned is: <<    abc>>.
GO
sp_dropmessage @msgnum = 50005;
GO

c.Ileti metni girmeniz için bir yerel değişken kullanma

Aşağıdaki kod örneği için ileti metni girmeniz için bir yerel değişken nasıl kullanıldığını gösterir bir RAISERROR deyim.

DECLARE @StringVariable NVARCHAR(50);
SET @StringVariable = N'<<%7.3s>>';

RAISERROR (@StringVariable, -- Message text.
           10, -- Severity,
           1, -- State,
           N'abcde'); -- First argument supplies the string.
-- The message text returned is: <<    abc>>.
GO