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

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 v SQL serveru

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.

5/5 - (1 vote)
Rubrika: SQL příkazy

O Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako data engineer freelancer. Během cca 10 let jsem zde shromáždil přes 600 IT case studies, průvodců, návodů a tipů určených zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Data Engineeringu, korporátních financí a reportingu. Zaměřuji se především na Microsoft technologie (on-prem i cloud) a různé synergické efekty v rámci jejich produktového portfolia pro dataře a finanční profesionály. Věnuji se také dalším platformám a významným hráčům z oblasti open source technologií. 🔥 Pokud vám tento článek pomohl, ocením referenci na vašem webu nebo zmínku v komunitě. A mám pro vás ještě tip: řešíte-li nějaký zapeklitý Excel problém, přihlašte se do naší Excel Facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse ».

Leave a Reply

Your email address will not be published. Required fields are marked *