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.

Rate this post

Jan Zedníček - Data & Finance

Jmenuji se Honza Zedníček a působím jako freelancer. Tuto práci dělám pro různé firmy již přes 10 let. Před tím jsem dlouhou dobu pracoval také jako BI developer, finanční controller, analytik a krátce jako finanční manažer. Vše pro společnosti z oblasti IT, bankovnictví a výroby. 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 a sloužily i někomu dalšímu.

=> Přihlašte se do naší Excel facebook skupiny (1.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »
=> Pokud vám článek pomohl, sdílejte ho nebo mě uveďte na vašich webových stránkách jako užitečný zdroj informací

Leave a Reply

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