Skip to main content

A TRY ... CATCH használata az SQL Server hibák kezeléséhez

List of tractor manufacturers | Wikipedia audio article (Június 2026)

List of tractor manufacturers | Wikipedia audio article (Június 2026)
Anonim

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 ;

TRY … CATCH Példa

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.

Többet megtudni

Ha szeretne többet megtudni a strukturált lekérdezési nyelvről, nézze meg a Bevezetés az SQL-be.