SQL RAISERROR – Jak zavolat ve skriptu error a přerušit skript

Poslední aktualizace:

V určitých situacích potřebujeme uvnitř SQL skriptu zavolat chybu a skript přerušit. Typickým případe je třeba nesplnění nějakého data quality checku nebo potřeba zavilat příkaz uvnitř BEGIN /END TRY BEGIN/END CATCH konstrukce. V podobných případech můžeme použít příkaz RAISERROR nebo novější příkaz THROW.

V tomto článku se podíváme na první zmíněný příkaz. Příkaz THROW je jednodušší.

Syntaxe RAISERROR

Syntaxe je jednoduchá a příkaz obsahuje 3 argumenty

RAISERROR (msg ,severity, state)

  • msg (message/zpráva) – error hláška
  • severity – závažnost chyby, může abývat hodnot 0-25. Tady bych doporučil prostudovat článek SQL Error hlášky a závažnost (severity). Severity <17 nezpůsobí přerušení skriptu – ukážu dále.
  • state – nabývá hodnot 0 – 255, volitelný

Příklad Informace, User Error a Severity >17

  1. Severity 0 – 10 => informace
  2. 11 – 16 => user error
  3. 17 – 25 => další různé typy chyb. Až tyto severities způsobují přeřušení skriptu

Demonstrovat budu na skriptu níže který spistím 3x – pro severity 8, 16 a 17. Nejprve v TRY části způsobím chybu (dělením nulou) a následně v CATCH část volám RAISERROR s různými severitami.

BEGIN TRY
   SELECT 1/0 --Error
END TRY
BEGIN CATCH
   RAISERROR ('Kdo neskáče není Čech....', 8, 1)
END CATCH

PRINT 'Hop....'

PRINT 'Hop....'

PRINT 'Hop....'

Severity 8 – Toto může být trošku matoucí. Voláme raiserror, ale vidíme, že příkaz nám vrací pouze informaci (text není červeně) a následně skript pokračuje dále na Hop, Hop, Hop.

RAISERROR severity 9

Severity 16 – Toto je matoucí ještě více..vidíme, že ve výsledku máme error a červený text, ale skript pokračoval dále na Hop, Hop, Hop.

RAISERROR severity 16

Severity 17 – Až od severity 17 – 25 dojde k přerušení skriptu, takže bacha

RAISERROR severity 17-25

Více o RAISERROR v dokumentaci Microsoftu. Výhody THROW oproti RAISERROR popisuje třeba Pinal Dave – Convert Old Syntax of RAISEERROR to THROW.

Zajímá vás jak se řeší error handling? Můžete si přečíst tento článek – SQL TRY CATCH – Error handling.

Rate this article

Jmenuji se Honza Zedníček a nejčastěji se se mnou v civilu můžete potkat v kancelářích Kentico Software v Brně, kde působím jako BI Developer. Částečně pracuji také jako freelancer. Tuto práci dělám pro různé firmy již přes 5 let, ale Kentico je moje srdcovka ♡. Před tím jsem pracoval jako finanční controller třeba v Aero Vodochody a Sberbank nebo jako manažer dluhopisového programu v investiční skupině Unicapital. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a rád ochutnávám dobré rumy. Svoje znalosti se snažím zapisovat na tento web - abych je nezapomněl (působením rumu ^^) a sloužily i někomu dalšímu. Nebojte se položit dotaz nebo reagovat do komentáře. Přihlašte se do naší nové Excel facebook skupiny Excel CZ/SK diskuse »

Category: RSS 1 Exclude SQL příkazy Tags: ,

About Ing. Jan Zedníček - BI Developer, Finance controller

Jmenuji se Honza Zedníček a nejčastěji se se mnou v civilu můžete potkat v kancelářích Kentico Software v Brně, kde působím jako BI Developer. Částečně pracuji také jako freelancer. Tuto práci dělám pro různé firmy již přes 5 let, ale Kentico je moje srdcovka ♡. Před tím jsem pracoval jako finanční controller třeba v Aero Vodochody a Sberbank nebo jako manažer dluhopisového programu v investiční skupině Unicapital. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a rád ochutnávám dobré rumy. Svoje znalosti se snažím zapisovat na tento web - abych je nezapomněl (působením rumu ^^) a sloužily i někomu dalšímu. Nebojte se položit dotaz nebo reagovat do komentáře. Přihlašte se do naší nové Excel facebook skupiny Excel CZ/SK diskuse »

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.