Príkaz TRY … CATCH v nástroji Transact-SQL zisťuje a zaobchádza s chybovými stavmi v databázových aplikáciách. Toto vyhlásenie je základným kameňom spracovania chýb SQL Serveru a je dôležitou súčasťou vývoja robustných databázových aplikácií. TRY … CATCH sa vzťahuje na SQL Server od roku 2008, Azure SQL Database, Azure SQL Data Warehouse a Parallel Data Warehouse.
Predstavujeme TRY … CATCH
TRY … CATCH funguje tak, že umožňuje špecifikovať dva príkazy Transact-SQL: jeden, ktorý chcete "vyskúšať" a druhý, ktorý sa má použiť na "zachytenie" akýchkoľvek možných chýb. Keď SQL Server narazí na príkaz TRY … CATCH, okamžite vykoná vyhlásenie uvedené v klauzuli TRY. Ak sa príkaz TRY úspešne vykoná, SQL Server sa presunie. Ak však príkaz TRY generuje chybu, SQL Server vykoná príkaz CATCH, aby túto chybu spracoval elegantne.
Základná syntax má túto podobu:
Začnite skúsiť bloku vyhlásení END TRYZAČAŤ ÚLOVKUsql_statementKONCOVÉ ZÁPACH ; Je ľahké pochopiť použitie tohto vyhlásenia prostredníctvom príkladu. Predstavte si, že ste správcom databázy ľudských zdrojov, ktorá obsahuje tabuľku s názvom Zamestnanci, ktorá obsahuje informácie o každom zamestnancov vo vašej organizácii. Táto tabuľka používa ako primárny kľúč celočíselné identifikačné číslo zamestnanca. Môžete sa pokúsiť použiť nižšie uvedené vyhlásenie na vloženie nového zamestnanca do vašej databázy: INSERT INTO zamestnanci (id, first_name, last_name, extension)HODNOTY (12497, "Mike", "Chapple", 4201)
Za normálnych okolností by toto vyhlásenie pridalo do tabuľky Zamestnanci riadok. Ak však zamestnanec s ID 12497 už existuje v databáze, vloženie riadku by porušilo obmedzenie primárneho kľúča a malo za následok nasledujúcu chybu: Msg 2627, úroveň 14, stav 1, riadok 1Porušenie obmedzenia PRIMARY KEY "PK_employee_id". Nedá sa vložiť duplicitný kľúč do objektu 'dbo.employees'.Vyhlásenie bolo ukončené.
Aj keď vám táto chyba poskytuje informácie, ktoré potrebujete na riešenie problému, sú s ňou dva problémy. Po prvé, správa je tajná. Obsahuje kódy chýb, čísla riadkov a ďalšie informácie, ktoré sú pre priemerného používateľa nepochopiteľné. Po druhé, a čo je dôležitejšie, spôsobí, že vyhlásenie preruší a mohlo by spôsobiť zlyhanie aplikácie.Alternatívou je zabaliť vyhlásenie v príkaze TRY … CATCH, ako je tu zobrazené: Začnite skúsiťINSERT INTO zamestnanci (id, first_name, last_name, extension)HODNOTY (12497, "Mike", "Chapple", 4201)END TRYZAČAŤ ÚLOVKUTLAČ "CHYBA:" + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Zamestnanecká pošta',@recipients = '[email protected]',@body = 'Pri vytváraní nového záznamu zamestnancov sa vyskytla chyba.',@subject = 'Chyba duplikácie zamestnanca ID';KONCOVÉ ZÁPACH
V tomto príklade sú všetky chyby, ktoré sa vyskytnú, hlásené užívateľovi, ktorý vykonal príkaz, a e-mailovú adresu [email protected]. Chyba zobrazená používateľovi je: Chyba: Porušenie obmedzenia PRIMARY KEY 'PK_employee_id'. Nedá sa vložiť duplicitný kľúč do objektu 'dbo.employees'.Pošta vo fronte.
Spustenie aplikácie pokračuje normálne, čo umožňuje programátorovi zvládnuť chybu. Použitie príkazu TRY … CATCH je elegantný spôsob proaktívneho zisťovania a spracovania chýb, ktoré sa vyskytujú v databázových aplikáciách SQL Server. Ak sa chcete dozvedieť viac o jazyku Štruktúrovaný dopyt, prečítajte si Úvod do SQL. TRY … Príklad výlovu
Viac informácií