Použití TRY / CATCH ke zpracování chyb serveru SQL

click fraud protection

Příkaz TRY / CATCH v Transact-SQL detekuje a zpracovává chybové podmínky v databázových aplikacích. Toto prohlášení je základním kamenem SQL Zpracování chyb serveru a je důležitou součástí vývoje robustních databázových aplikací.

VYZKOUŠEJTE / ZACHYCUJTE se na SQL Server počínaje rokem 2008, Azure SQL Database, Azure SQL Data Warehouse a Parallel Data Warehouse.

Představujeme TRY / CATCH

TRY./CATCH funguje tak, že zadáte dva příkazy Transact-SQL: jeden, který chcete „vyzkoušet“ a druhý, který se použije k „zachycení“ případných chyb. Když SQL Server narazí na příkaz TRY / CATCH, okamžitě provede příkaz obsažený v klauzuli TRY. Pokud se příkaz TRY provede úspěšně, SQL Server přejde dál. Pokud však příkaz TRY vygeneruje chybu, SQL Server provede příkaz CATCH, aby chybu elegantně zpracoval.

Základní syntax má tuto formu:

ZAČNĚTE VYZKOUŠAT
{sql_statement | blok prohlášení}
KONEC VYZKOUŠEJTE
ZAČNĚTE ÚLOVEK
[{sql_statement | statement_block}]
KONEC ÚLOVKU
[; ]

Příklad VYZKOUŠEJTE / ZÍSKEJTE

Zvažte databázi lidských zdrojů, která obsahuje tabulku s názvem

instagram viewer
zaměstnanci, který obsahuje informace o každém ze zaměstnanců ve společnosti. Tato tabulka používá jako celé číslo ID zaměstnance primární klíč.

Můžete se pokusit použít následující příkaz k vložení nového zaměstnance do vaší databáze:

INSERT INTO zaměstnanců (id, first_name, last_name, extension)
HODNOTY (12497, „Mike“, „Chapple“, 4201)

Za normálních okolností by toto prohlášení přidalo řádek do tabulky Zaměstnanci. Pokud však zaměstnanec s ID 12497 již v databázi existuje, vložení řádku by porušilo omezení primárního klíče a mělo by za následek následující chybu:

Zpráva 2627, úroveň 14, stav 1, řádek 1
Porušení omezení PRIMARY KEY 'PK_employee_id'. Nelze vložit duplicitní klíč do objektu „dbo.employees“.
Prohlášení bylo ukončeno.

I když tato chyba poskytuje informace, které potřebujete k řešení problému, existují dva problémy. Za prvé, zpráva je záhadná. Zahrnuje chybové kódy, čísla linek a další informace, které jsou pro průměrného uživatele nepochopitelné. Za druhé, a co je důležitější, způsobí přerušení příkazu a může způsobit selhání aplikace.

Alternativou je zabalit příkaz do příkazu TRY… CATCH, jak je znázorněno zde:

ZAČNĚTE VYZKOUŠAT
INSERT INTO zaměstnanců (id, first_name, last_name, extension)
HODNOTY (12497, „Mike“, „Chapple“, 4201)
KONEC VYZKOUŠEJTE
ZAČNĚTE ÚLOVEK
PRINT 'ERROR:' + ERROR_MESSAGE ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Zaměstnanec Mail',
@recipients = '[email protected]',
@body = 'Při vytváření nového záznamu zaměstnance došlo k chybě.',
@subject = 'Chyba databáze zaměstnanců';
KONEC ÚLOVKU

V tomto příkladu jsou všechny chyby, které nastanou, hlášeny jak uživateli provádějícímu příkaz, tak e-mailové adrese [email protected]. Chyba zobrazená uživateli je:

Chyba: Porušení omezení PRIMARY KEY 'PK_employee_id'. 
Nelze vložit duplicitní klíč do objektu „dbo.employees“.
Pošta ve frontě.

Spuštění aplikace pokračuje normálně, což umožňuje programátorovi zpracovat chybu. Použití příkazu TRY / CATCH je elegantním způsobem, jak proaktivně detekovat a zpracovávat chyby, ke kterým dochází v databázových aplikacích serveru SQL Server.

Dozvědět se více

Další informace o jazyce strukturovaných dotazů naleznete v našem článku Základy SQL.

instagram story viewer