Příkaz SQL RAISERROR se používá k odeslání vlastní zprávy klientské aplikaci. Může být také použit k ladění aplikace a vztahuje se na mechanismus zpracování chyb.
Syntaxe a parametry příkazu SQL RAISERROR
Syntaxe příkazu SQL RAISERROR je následující:
RAISERROR ( { message_text | message_id | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ]
[ WITH option [ ,...n ] ];
Níže vidíte vysvětlení parametrů klíčového slova RAISERROR, které můžete zadat:
text_zprávy – zpráva, kterou chcete zobrazit při chybě. Poznámka: Můžeme přidat vlastní zprávy, které zobrazí informace o chybě. Viz vysvětlení ve druhé části článku.
ID_zprávy – ID chybové zprávy. Pokud chcete zobrazit uživatelem definovanou zprávu, musíte ji definovat. Prohlédněte si seznam message_ids v sys.messages DMV .
Dotaz
select * from sys.messages
Výstup:
závažnost – závažnost chyby. Datový typ závažnosti proměnná je malý a hodnoty jsou mezi 0 a 25. Platné hodnoty závažnosti chyby jsou následující:
- 0–10 – informační zprávy
- 11–18 – chyby
- 19–25 – fatální chyby
Poznámka : Pokud vytvoříte uživatelsky definovanou zprávu, bude závažnost zadaná v uživatelsky definované zprávě přepsána závažností zadanou v příkazu RAISERROR.
stát – jedinečné identifikační číslo, které můžete použít k identifikaci části kódu, která způsobuje chybu. Datový typ parametru stavu je malý a hodnoty jsou mezi 0 a 255.
Nyní pojďme k praktickým příkladům.
Příklad 1:Použití příkazu SQL Server RAISERROR k tisku výstupu
V tomto příkladu můžete vidět, jak můžeme zobrazit chybovou nebo informační zprávu pomocí příkazu RAISERROR.
Předpokládejme, že chcete zobrazit zprávu po vložení záznamů do tabulky. Můžeme použít příkazy SQL PRINT nebo RAISERROR. Následuje kód:
SET nocount ON
INSERT INTO tblpatients
(patient_id,
patient_name,
address,
city)
VALUES ('OPD00006',
'Nimesh Upadhyay',
'AB-14, Ratnedeep Flats',
'Mehsana')
RAISERROR ( 'Patient detail added successfully',1,1)
Výstup:
Jak můžete vidět na obrázku výše, ID zprávy je 50000, protože jde o uživatelsky definovanou zprávu.
Příklad 2:SQL příkaz RAISERROR s dynamickým textem zprávy
Nyní se podívejte, jak můžeme vytvořit dynamický text zprávy pro příkaz SQL RAISERROR.
Předpokládejme, že chceme ve zprávě vytisknout ID pacienta. Definoval jsem lokální proměnnou s názvem @PatientID , který obsahuje id_pacienta . Chcete-li zobrazit hodnotu @patientID proměnné v textu zprávy, můžeme použít následující kód:
DECLARE @PatientID VARCHAR(15)
DECLARE @message NVARCHAR(max)
SET @PatientID='OPD00007'
SET @message ='Patient detail added successfully. The OPDID is %s'
INSERT INTO tblpatients
(patient_id,
patient_name,
address,
city)
VALUES ('' + @PatientID + '',
'Nimesh Upadhyay',
'AB-14, Ratnedeep Flats',
'Mehsana')
RAISERROR ( @message,1,1,@patientID)
Výstup:
Chcete-li zobrazit řetězec v příkazu RAISERROR, musíme použít tiskové příkazy ve stylu C.
Jak můžete vidět na obrázku výše, do zobrazit parametr v textu zprávy, použil jsem možnost %s který zobrazuje hodnotu řetězce parametru . Pokud chcete zobrazit celočíselný parametr , můžete použít možnost %d .
Použijte SQL RAISERROR v bloku TRY..CATCH
V tomto příkladu přidáváme SQL RAISERROR do bloku TRY. Když tento kód spustíme, provede se v přidruženém bloku CATCH. V bloku CATCH zobrazíme podrobnosti o vyvolané chybě.
BEGIN try
RAISERROR ('Error invoked in the TRY code block.',16,1 );
END try
BEGIN catch
DECLARE @ErrorMsg NVARCHAR(4000);
DECLARE @ErrSeverity INT;
DECLARE @ErrState INT;
SELECT @ErrorMsg = Error_message(),
@ErrSeverity = Error_severity(),
@ErrState = Error_state();
RAISERROR (@ErrorMsg,
@ErrSeverity,
@ErrState
);
END catch;
Proto jsme přidali příkaz RAISERROR s závažností mezi 11-19. Způsobí provedení bloku CATCH.
V rámci bloku CATCH zobrazujeme informace o původní chybě pomocí příkazu RAISERROR.
Výstup:
Jak vidíte, kód vrátil informaci o původní chybě.
Nyní pochopíme, jak můžeme přidat vlastní zprávu pomocí sp_addmessage uložená procedura.
uložená procedura sp_addmessage
Vlastní zprávu můžeme přidat spuštěním sp_addmessages uložené procedury. Syntaxe je:
EXEC Sp_addmessage
@msgnum= 70001,
@severity=16,
@msgtext='Please enter the numeric value',
@lang=NULL,
@with_log='TRUE',
@replace='Replace';
@msgnum: Zadejte číslo zprávy. Datový typ parametru je celé číslo. Je to ID zprávy pro uživatelem definovanou zprávu.
@závažnost: Zadejte úroveň závažnosti chyby. Platné hodnoty jsou mezi 1 a 25. Datový typ parametru je smallint.
@text zprávy: Zadejte zprávu, kterou chcete zobrazit. Datový typ parametru je nvarchar(255), a výchozí hodnota je NULL.
@lang: Zadejte jazyk, který chcete použít k zobrazení chybové zprávy. Výchozí hodnota je NULL.
@with_log: Tento parametr se používá k zápisu zprávy do prohlížeče událostí. Platné hodnoty jsou TRUE a FALSE. Pokud zadáte TRUE, chybová zpráva bude zapsána do prohlížeče událostí systému Windows. Pokud zvolíte FALSE, chyba nebude zapsána do protokolu chyb systému Windows.
@nahradit: Pokud chcete nahradit existující chybovou zprávu uživatelsky definovanou zprávou a úrovní závažnosti, můžete náhradu zadat v uložené proceduře.
Předpokládejme, že chcete vytvořit chybovou zprávu, která vrátí neplatnou kvalitu chyba. V příkazu INSERT hodnota množství_produktu je mezi 20 a 100. Zpráva by měla být považována za chybu a její závažnost je 16.
Chcete-li vytvořit zprávu, spusťte následující dotaz:
USE master;
go
EXEC Sp_addmessage
70001,
16,
N'Product Quantity must be between 20 and 100.';
go
Jakmile byla zpráva přidána, spusťte níže uvedený dotaz a zobrazte ji:
USE master
go
SELECT * FROM sys.messages WHERE message_id = 70001
Výstup:
Jak používat uživatelem definované chybové zprávy
Jak jsem již zmínil, musíme použít id_zprávy v příkazu RAISERROR pro uživatelem definované zprávy.
Vytvořili jsme zprávu s ID 70001. Příkaz RAISERROR by měl být následující:
USE master
go
RAISERROR (70001,16,1 );
go
Výstup:
Příkaz RAISERROR vrátil uživatelem definovanou zprávu.
uložená procedura sp_dropmessage
Zpráva sp_dropmessage uložená procedura se používá k odstranění uživatelem definovaných zpráv. Syntaxe je následující:
EXEC Sp_dropmessage @msgnum
V syntaxi @msgnum určuje ID zprávy, kterou chcete smazat.
Nyní chceme smazat zprávu, jejíž ID je 70001 . Dotaz je následující:
EXEC Sp_dropmessage 70001
Jakmile byla zpráva odstraněna, spusťte následující dotaz a zobrazte ji:
USE master
go
SELECT * FROM sys.messages WHERE message_id = 70001
Výstup:
Jak vidíte, zpráva byla smazána.
Shrnutí
Prozkoumali jsme tedy příkaz RAISERROR, jeho parametry a demonstrovali jeho použití na praktických příkladech. Také jsme objasnili použití sp_addmessage a sp_dropmessage uložené procedury. Doufám, že vám tento článek přinesl užitečné informace pro vaše pracovní cíle.
Vždy si rádi vyslechneme vaše komentáře a možná i další praktické tipy, pokud je budete chtít sdílet.