Aracılığıyla paylaş


throw (Transact-sql)

Bir özel durum oluşturur ve Yürütme try… catch bloğuna transfer eder.catch yapısı içinde SQL Server 2012.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

THROW [ { error_number | @local_variable },
        { message | @local_variable },
    { state | @local_variable }
] [ ; ]

Bağımsız değişkenler

  • error_number
    Bir sabit veya değişken özel durumu gösterir. error_numberise intve 50000 eşit veya daha büyük olmalıdır ve küçük veya eşit 2147483647.

  • message
    Bir dizge veya değişken özel durumu açıklar. messageis nvarchar(2048).

  • state
    Bir sabit veya ileti ile ilişkilendirmek için devlet gösteren değişken 0-255 arasında olduğunu. stateis tinyint.

Açıklamalar

Noktalı virgülle (;) throw deyimini uyulması gereken önce ifade deyimi Sonlandırıcı.

Eğer bir try…catch yapısı yok, oturum sona erdi. Satır numarası ve burada özel durum oluşturuldu yordamı ayarlanır. Şiddeti 16 olarak ayarlanır.

Parametresiz throw ifadesi belirtilirse, bir catch bloğu içinde yer almalıdır. Bu özel geçirilen durum yakaladı neden olur. Deyimi toplu olmak sevdirmek için bir throw ifadesi içinde oluşan herhangi bir hata neden olur.

RAISERROR ile ATMAK arasındaki farklar

RAISERROR ve ATMAK deyimleri arasındaki farklar aşağıdaki tabloda listelenmektedir.

RAISERROR deyimi

Deyimi ATMAK

Eğer bir msg_id geçirilen RAISERROR için içinde kimliği tanımlanması gereken sys.messages.

error_numberİçinde tanımlanan parametre yok sys.messages.

msg_strParametre içerebilir printfbiçimlendirme stilleri.

messageParametre kabul printfStil biçimlendirmesi.

severityParametresi, İstisnanın önem derecesi belirtir.

There is no severityparametresi. İstisnanın önem derecesi her zaman 16 olarak ayarlanır.

Örnekler

A.throw istisna artırmak için kullanma

Aşağıdaki örnek, nasıl kullanılacağını gösterir THROWbir istisna yükseltmek için deyimi.

THROW 51000, 'The record does not exist.', 1;

THROW 51000, 'The record does not exist.', 1;

B.throw istisna yeniden artırmak için kullanma

Aşağıdaki örnek gösterir nasıl THROWson atılmış istisna tekrar yükseltmek için deyimi.

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;

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 buradadır.

PRINT '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.formatmessage ATMAK ile kullanma

Aşağıdaki örnek, nasıl kullanılacağını gösterir FORMATMESSAGEdeyimi ile THROWbir özelleştirilmiş hata iletisi atmaya.

DECLARE @Message NVARCHAR(2048);
SELECT @Message = FORMATMESSAGE(1127);
THROW 50001, @Message, 1;

DECLARE @Message NVARCHAR(2048);
SELECT @Message = FORMATMESSAGE(1127);
THROW 50001, @Message, 1;

Ayrıca bkz.

Başvuru

formatmessage (Transact-sql)

ERROR_LINE (Transact-sql)

error_message (Transact-sql)

error_number (Transact-sql)

error_procedure (Transact-sql)

ERROR_SEVERITY (Transact-sql)

error_state (Transact-sql)

RAISERROR (Transact-SQL)

@@ error (Transact-sql)

GOTO (Transact-sql)

BAŞLAR...SONUNDA (Transact-sql)

xact_state (Transact-sql)

set xact_abort (Transact-sql)

Kavramlar

Veritabanı Altyapısı hata Severities