RAISERROR
Z SQL stored procedur můžeme oznamovat vnější aplikaci chyby prostřednictvím příkazu RAISERROR, nejběžněji:
RAISERROR(message_str, severity_int, state_int, arg1, arg2)
přičemž
- message_str představuje textový popis chyby v like-PRINTF podobě s procentama (argn pak představují hodnoty k dosazení),
- severity_int udává závažnost chyby (viz níže),
- state_int je číslo od 1 do 127 a předává se tím stavová hodnota (obvykle prostě 1)
např. tedy
RAISERROR ('The level for job_id:%d should be between %d and %d.', 16, 1, @@JOB_ID, @@MIN_LVL, @@MAX_LVL)
ADO.NET
A teď k efektu RAISERROR v ADO.NET – vše závisý na parametry severity. Pro uživatelské chyby jsou určeny severity od 1 do 18, severity od 19 do 25 jsou určeny pro sysadmina.
Výsledký efekt v ADO.NET je tedy následující:
- severity <= 10 nevyvolá výjimku v .NET, nýbrž event InfoMessage související SqlConnection (k odchycení musíme navěsit event-handler),
- severity > 10 vyvolá výjimku SqlException, ale nezavře spojení,
- severity > 16 vyvolá výjimky SqlException a uzavře spojení.
POZOR!!! Samotné RAISERROR nezajistí ROLLBACK transakce (musí se provést explicitně), ani nepřeruší běh T-SQL dávky (nutno třeba RETURN).