Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Kivételt emel ki, és a végrehajtást a TRY blokkjára CATCH továbbítja ... CATCH szerkezet.
Transact-SQL szintaxis konvenciók
Syntax
THROW [ { error_number | @local_variable }
, { message | @local_variable }
, { state | @local_variable } ]
[ ; ]
Arguments
error_number
A kivételt jelképező állandó vagy változó. A error_number argumentum int, és 50 000-nél nagyobbnak vagy egyenlőnek kell lennie, és kisebbnek vagy egyenlőnek kell lennie, mint 2 147 483 647.
message
A kivételt leíró sztring vagy változó. Az üzenet argumentuma nvarchar(2048).
state
0 és 255 közötti állandó vagy változó, amely az üzenethez társítandó állapotot jelzi. Az állapotargumentum kicsi.
Remarks
Állapot használatával azonosíthatja a tárolt eljárás, eseményindító vagy utasítás kötegben található hiba forrását. Ha például ugyanazt az üzenetet több helyen használja, egy egyedi állapotérték segíthet megtalálni a hiba helyét.
Az utasítás előtti THROW utasítást a pontosvessző (;) utasítás terminátorának kell követnie.
Ha egy TRY...CATCH szerkezet nem érhető el, az utasítás köteg leáll. A sorszám és az eljárás, ahol a kivétel keletkezik, be van állítva. A súlyosság értéke .16
Ha az THROW utasítás paraméterek nélkül van megadva, egy blokkban CATCH kell megjelennie. Ez miatt a kivétel ki van emelve. Az utasításban THROW előforduló hibák miatt az utasítás köteg leáll.
% egy utasítás üzenetszövegében THROW foglalt karakter, amelyet meg kell szökni. Dupla karaktert % ad vissza % például az üzenetszöveg 'The increase exceeded 15%% of the original value'részeként.
Különbségek a RAISERROR és a THROW között
Az alábbi táblázat a RAISERROR és THROW az utasítások közötti különbségeket sorolja fel.
| RAISERROR állítás | THROW nyilatkozat |
|---|---|
Ha egy msg_id ad át RAISERROR, az azonosítót a következőben sys.messageskell definiálni: . |
A error_number paramétert nem kell definiálni a következőben sys.messages: . |
A msg_str paraméter formázási stílusokat tartalmazhat printf . |
Az üzenetparaméter nem fogadja el printf a stílusformázást. |
| A súlyossági paraméter a kivétel súlyosságát határozza meg. | Nincs súlyossági paraméter. Amikor THROW a kivétel kezdeményezésére szolgál, a súlyosság mindig a következőre 16van állítva: .
THROW Ha azonban egy meglévő kivétel visszaállítására használják, a súlyosság az adott kivétel súlyossági szintjére van állítva. |
| Nem tiszteli a SET XACT_ABORT. | A tranzakciók vissza lesznek állítva, ha a SET XACT_ABORT .ON |
Examples
A. Kivétel létrehozása a THROW használatával
Az alábbi példa bemutatja, hogyan lehet az THROW utasítás használatával kivételt emelni.
THROW 51000, 'The record does not exist.', 1;
Itt van az eredmények összessége.
Msg 51000, Level 16, State 1, Line 1
The record does not exist.
B. A THROW használatával ismét kivételt emelhet
Az alábbi példa bemutatja, hogyan használhatja az THROW utasítást az utolsó kidobott kivétel ismételt kiemelésére.
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;
Itt van az eredmények összessége.
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. A FORMATMESSAGE használata a THROW használatával
Az alábbi példa bemutatja, hogyan használhatja a FORMATMESSAGE függvényt THROW egy testreszabott hibaüzenet küldéséhez. A példa először létrehoz egy felhasználó által definiált hibaüzenetet a használatával sp_addmessage. Mivel az THROW utasítás nem teszi lehetővé a helyettesítési paramétereket az üzenetparaméterbenRAISERROR, a függvény a FORMATMESSAGE hibaüzenet 60000által várt három paraméterérték átadására szolgál.
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;
Itt van az eredmények összessége.
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).