A TRY … CATCH utasítás a Transact-SQL-ben észleli és kezeli a hibahelyeket az adatbázis-alkalmazásokban. Ez az állítás az SQL Server hibakezelésének sarokköve, és fontos része a robusztus adatbázis-alkalmazások fejlesztésének. TRY … CATCH a 2008-tól kezdődően az SQL Serverre, az Azure SQL adatbázisra, az Azure SQL Data Warehousera és a Parallel Data Warehousera vonatkozik.
Bemutatjuk a TRY … CATCH-ot
TRY … CATCH működik, lehetővé téve, hogy két Transact-SQL kifejezést adjon meg: az egyik, amelyet "megpróbál", a másik pedig "felkaphat" minden esetlegesen felmerülő hibát. Amikor az SQL Server egy TRY … CATCH utasítással találkozik, azonnal végrehajtja a TRY záradékban szereplő állítást. Ha a TRY utasítás sikeresen végrehajtódik, az SQL Server továbbhalad. Ha azonban a TRY utasítás hibát generál, az SQL Server végrehajtja a CATCH utasítást, hogy kijavítsa a hibát.
Az alapszintaxis ezt a formát veszi:
BEGIN TRY nyilatkozat blokk END TRYBEGIN CATCHsql_statementEND CATCH ; Könnyen megértheted ezt a nyilatkozatot egy példa segítségével. Képzelje el, hogy Ön egy emberi erőforrás-adatbázis rendszergazdája, amely egy "Employees" nevű táblát tartalmaz, amely információkat tartalmaz a szervezet összes alkalmazottjától. Ez az asztal elsődleges kulcsként egy teljes alkalmazott azonosító számot használ. Lehet, hogy az alábbi nyilatkozatot próbálja felhasználni az új alkalmazottak új adatbázishoz: INSERT INTO alkalmazottak (id, first_name, last_name, extension)VALUES (12497, "Mike", "Chapple", 4201)
Normál körülmények között ez a nyilatkozat egy sorot ad hozzá az Alkalmazottak táblázatához. Ha azonban az adatbázisban már létezik egy 12497-es azonosító, a sor beillesztése sértené az elsődleges kulcskorlátot, és a következő hibát eredményezheti: Msg 2627, 14. szint, 1. állapot, 1. sorA PRIMARY KEY megsértése "PK_employee_id". A "dbo.employees" objektum nem helyezhető be duplikált kulcsba.A kijelentés befejeződött.
Bár ez a hiba a problémát elhárító adatokkal szolgál, két probléma merül fel vele. Először is, az üzenet rejtélyes. Ez magában foglalja a hibakódokat, vonalkódokat és egyéb információkat, amelyek érthetetlenek az átlag felhasználó számára. Másodszor, és még ennél is fontosabb, az abbahagyja az állítást, és az alkalmazás összeomlik.Az alternatíva az, hogy a nyilatkozatot egy TRY … CATCH utasításban lefedje, ahogy itt látható: BEGIN TRYINSERT INTO alkalmazottak (id, first_name, last_name, extension)VALUES (12497, "Mike", "Chapple", 4201)END TRYBEGIN CATCHPRINT 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Employee Mail',@recipients = '[email protected]',@body = 'Hiba történt az új alkalmazotti rekord létrehozása során.',@subject = 'Munkavállalói azonosító párhuzamos hiba';END CATCH
Ebben a példában minden előforduló hiba jelentkezik mind a parancsot futtató felhasználóhoz, mind a [email protected] e-mail címhez. A felhasználó számára látható hiba: Hiba: PRIMARY KEY megsértése "PK_employee_id". A "dbo.employees" objektum nem helyezhető be duplikált kulcsba.Mail sorban áll.
Az alkalmazás végrehajtása folytatódik, így a programozó képes kezelni a hibát. A TRY … CATCH utasítás használata elegáns módja az SQL Server adatbázis-alkalmazásokban előforduló hibák proaktív észlelésére és kezelésére. Ha szeretne többet megtudni a strukturált lekérdezési nyelvről, nézze meg a Bevezetés az SQL-be. TRY … CATCH Példa
Többet megtudni




