Příkaz TRY … CATCH v nástroji Transact-SQL zjišťuje a zpracovává chybové podmínky v databázových aplikacích. Toto prohlášení je základním kamenem zpracování chyb SQL Serveru a je důležitou součástí rozvíjení robustních databázových aplikací. TRY … CATCH se vztahuje na SQL Server od roku 2008, Azure SQL Database, Azure SQL Data Warehouse a Parallel Data Warehouse.
Představujeme TRY … CATCH
TRY … CATCH funguje tak, že umožňuje určit dvě příkazy Transact-SQL: jednu, kterou chcete "zkusit" a druhou použít, abyste "chytili" chyby, které by mohly vzniknout. Když SQL Server narazí na příkaz TRY … CATCH, okamžitě provede příkaz zahrnutý v klauzuli TRY. Pokud příkaz TRY úspěšně spustí, SQL Server se přesune. Pokud však příkaz TRY vygeneruje chybu, SQL Server provede příkaz CATCH, aby tuto chybu zpracoval elegantně.
Základní syntaxe má tuto podobu:
Začněte vyzkoušet bloku prohlášení END TRYZAČÍNÁME ÚLOVKUsql_statementKONCOVÝ ÚLOVKOU ; Je snadné pochopit použití tohoto prohlášení prostřednictvím příkladu. Představte si, že jste správcem databáze lidských zdrojů, která obsahuje tabulku s názvem Zaměstnanci, která obsahuje informace o každém ze zaměstnanců ve vaší organizaci. Tato tabulka používá jako primární klíč celé identifikační číslo zaměstnance. Pokud chcete do databáze vložit nový zaměstnanec, můžete se pokusit použít níže uvedené prohlášení: INSERT INTO zaměstnanci (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ž existuje v databázi, vložení řádku by porušilo omezení primárního klíče a způsobilo následující chybu: Msg 2627, úroveň 14, stav 1, řádek 1Porušení omezení PRIMARY KEY 'PK_employee_id'. Nelze vložit duplicitní klíč do objektu 'dbo.employees'.Prohlášení bylo ukončeno.
Přestože tato chyba poskytuje informace, které potřebujete k vyřešení problému, máte s ním dva problémy. Nejprve je zpráva tajná. Obsahuje kódy chyb, čísla řádků a další informace, které jsou pro průměrného uživatele nepochopitelné. Za druhé, a co je ještě důležitější, způsobí, že prohlášení zruší a mohlo by způsobit selhání aplikace.Alternativou je zabalit příkaz v příkazu TRY … CATCH, jak je zde zobrazeno: Začněte vyzkoušetINSERT INTO zaměstnanci (id, first_name, last_name, extension)HODNOTY (12497, "Mike", "Chapple", 4201)END TRYZAČÍNÁME ÚLOVKUTISK 'CHYBA:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Zaměstnanecká pošta',@recipients = '[email protected]',@body = 'Došlo k chybě při vytváření nového záznamu zaměstnanců.',@subject = 'Chyba při duplikaci ID zaměstnance';KONCOVÝ ÚLOVKOU
V tomto příkladu jsou všechny chyby, které se vyskytnou, hlášeny jak uživateli, který provádí příkaz, tak e-mailovou adresu [email protected]. Chyba zobrazená uživateli je následující: 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átoru zvládnout chybu. Použití příkazu TRY … CATCH je elegantní způsob, jak aktivně detekovat a zpracovat chyby, které se vyskytují v databázových aplikacích serveru SQL. Pokud se chcete dozvědět více o jazyce strukturovaných dotazů, podívejte se na Úvod do SQL. TRY … Příklad výlovu
Další informace