• 21.8.2019
  • Ing. Jan Zedníček - Data Engineer & Controlling
  • 0

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)

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

Jmenuji se Honza Zedníček a působím jako freelancer. Pracoval jsem dříve také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví, consultingu a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a občas neúspěšně odpálím pár balónků v golfu 🏌️

Již cca 10 let zapisuji na tento web různé návody určené zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

🔥 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 *