Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft Fabric'teki SQL veritabanı
Özel durum oluşturur ve yürütmeyi BIR CATCH TRY bloğuna aktarır ... CATCH yapısı.
Transact-SQL söz dizimi kuralları
Syntax
THROW [ { error_number | @local_variable }
, { message | @local_variable }
, { state | @local_variable } ]
[ ; ]
Arguments
error_number
Özel durumu temsil eden bir sabit veya değişken. error_number bağımsız değişkeni int'tir ve 50.000'den büyük veya buna eşit ve 2.147.483.647'den küçük veya buna eşit olmalıdır.
message
Özel durumu açıklayan bir dize veya değişken. İleti bağımsız değişkeni nvarchar(2048)'dir.
state
İletiyle ilişkilendirilecek durumu gösteren 0 ile 255 arasında bir sabit veya değişken. Durum bağımsız değişkeni tinyint'tir.
Remarks
Saklı yordam, tetikleyici veya deyim toplu işleminizdeki bir hatanın kaynağını belirlemenize yardımcı olması için durumu kullanın. Örneğin, aynı iletiyi birden çok yerde kullanırsanız, benzersiz bir durum değeri hatanın oluştuğu yeri bulmanıza yardımcı olabilir.
Deyiminden önceki deyimin THROW ardından noktalı virgül (;) deyimi sonlandırıcısı bulunmalıdır.
Bir TRY...CATCH yapı kullanılamıyorsa, deyim toplu işlemi sonlandırılır. Özel durumun oluştuğu satır numarası ve yordam ayarlanır. Önem derecesi olarak 16ayarlanır.
THROW deyimi parametresiz belirtilirse, bir CATCH bloğun içinde görünmelidir. Bu, yakalanan özel durumun yükseltilmesine neden olur. Deyimde oluşan herhangi bir THROW hata, deyim toplu işleminin sonlandırılmasına neden olur.
% bir deyiminin ileti metninde ayrılmış bir THROW karakterdir ve kaçış karakteri olmalıdır. İleti metninin % parçası olarak döndürülecek % karakterin iki katı, örneğin 'The increase exceeded 15%% of the original value'.
RAISERROR ile THROW arasındaki farklar
Aşağıdaki tabloda RAISERROR ile THROW deyimler arasındaki farklar listelemektedir.
| RAISERROR ifadesi | THROW ifadesi |
|---|---|
bir msg_id geçirilirseRAISERROR, kimlik içinde sys.messagestanımlanmalıdır. |
error_number parametresinin içinde sys.messagestanımlanması gerekmez. |
msg_str parametresi biçimlendirme stilleri içerebilirprintf. |
İleti parametresi stil biçimlendirmesini kabul printf etmiyor. |
| önem derecesi parametresi özel durumun önem derecesini belirtir. |
Önem derecesi parametresi yok.
THROW Özel durumu başlatmak için kullanıldığında önem derecesi her zaman olarak 16ayarlanır. Ancak, THROW mevcut bir özel durumu yeniden yüklemek için kullanıldığında, önem derecesi bu özel durumun önem düzeyine ayarlanır. |
| SET XACT_ABORT'a uymuyor. |
SET XACT_ABORT ise işlemler ON. |
Examples
A. Throw kullanarak özel durum oluşturma
Aşağıdaki örnekte, özel durum yükseltmek için deyiminin THROW nasıl kullanılacağı gösterilmektedir.
THROW 51000, 'The record does not exist.', 1;
Sonuç kümesi aşağıdadır.
Msg 51000, Level 16, State 1, Line 1
The record does not exist.
B. Bir özel durumu yeniden yükseltmek için THROW kullanma
Aşağıdaki örnekte, son oluşan özel durumu yeniden yükseltmek için deyiminin nasıl kullanılacağı THROW gösterilmektedir.
USE tempdb;
GO
CREATE TABLE dbo.TestRethrow
( ID INT PRIMARY KEY
);
BEGIN TRY
INSERT dbo.TestRethrow(ID) VALUES(1);
-- Force error 2627, Violation of PRIMARY KEY constraint to be raised.
INSERT dbo.TestRethrow(ID) VALUES(1);
END TRY
BEGIN CATCH
PRINT 'In catch block.';
THROW;
END CATCH;
Sonuç kümesi aşağıdadır.
In catch block.
Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'PK__TestReth__3214EC272E3BD7D3'. Cannot insert duplicate key in object 'dbo.TestRethrow'.
The statement has been terminated.
C. THROW ile FORMATMESSAGE kullanma
Aşağıdaki örnekte, özelleştirilmiş bir hata iletisi oluşturmak için FORMATMESSAGE işlevinin ile THROW nasıl kullanılacağı gösterilmektedir. Örnek ilk olarak kullanarak sp_addmessagekullanıcı tanımlı bir hata iletisi oluşturur.
THROW deyimi, ileti parametresinde RAISERROR değiştirme parametrelerine izin vermediğinden, FORMATMESSAGE işlevi hata iletisi 60000tarafından beklenen üç parametre değerini geçirmek için kullanılır.
EXEC sys.sp_addmessage
@msgnum = 60000,
@severity = 16,
@msgtext = N'This is a test message with one numeric parameter (%d), one string parameter (%s), and another string parameter (%s).',
@lang = 'us_english';
GO
DECLARE @msg NVARCHAR(2048) = FORMATMESSAGE(60000, 500, N'First string', N'second string');
THROW 60000, @msg, 1;
Sonuç kümesi aşağıdadır.
Msg 60000, Level 16, State 1, Line 2
This is a test message with one numeric parameter (`500`), one string parameter (First string), and another string parameter (second string).