Před časem jsem zde na webu zveřejnil článek o RAISERROR příkazu, který vyvolá exception s tím, že jsme schopni přes severity (závažnost) ovlivnit, jestli skript bude nebo nebude pokračovat dále. Příkaz THROW je alternativní příkaz, který byl poprvé uveden v rámci SQL Server 2012.
Syntaxe THROW v SQL Server
Syntaxe je v porovnání s RAISERROR jednodušší. Pro přehled zde napíšu syntaxi obou příkazů.
RAISERROR (msg ,severity, state)
vs
BEGIN TRY
SELECT 1/0
END TRY
BEGIN CATCH
THROW [ { error_number | @local_variable },
{ message | @local_variable },
{ state | @local_variable } ]
[ ; ]
END CATCH
Zatímto RAISERROR přijímá 3 argumenty, tak THROW se může (ale nemusí) volat samostatně – uvnitř TRY/CATCH error handling konstrukce. V případě, že se pokusíme příkaz spustit jen tak, výsledkem bude chyba:
Mimo TRY/CATCH blok lze příkaz použít třeba takto
THROW 51000, ‘The record does not exist.’, 1;