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

A TRY / CATCH utasítás a Transact-SQL-ben észleli és kezeli az adatbázis-alkalmazások hibakörülményeit. Ez az állítás a sarokköve SQL A szerver hibakezelése fontos szerepet játszik a robusztus adatbázis-alkalmazások fejlesztésében.

A TRY / CATCH a 2008-tól kezdődő SQL Serverre, az Azure SQL Database, az Azure SQL Data Warehouse és a Parallel Data Warehouse szolgáltatásokra vonatkozik.

Bemutatkozik a TRY / Catch

A TRY./CATCH két Transact-SQL utasítás megadásával működik: az egyiket "kipróbálni" akarja, a másikat pedig a felmerülő hibák "elkapására". Amikor az SQL Server egy TRY / CATCH utasítással találkozik, azonnal végrehajtja a TRY záradékban szereplő utasí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 kecsesen kezelje a hibát.

Az alapszintaktika a következő formát ölti:

PRÓBA KEZDÉS
{sql_statement | utasításblokk}
VÉGE TRY
FOGÁS KEZDÉSE
[{sql_statement | utasítás_blokk}]
FOGÁS VÉGE
[; ]
instagram viewer

TRY / Catch

Vegyünk egy emberi erőforrás adatbázist, amely megnevezett táblázatot tartalmaz alkalmazottak, amely információkat tartalmaz a vállalat minden alkalmazottjáról. Ez a tábla egész számú alkalmazott azonosító számot használ elsődleges kulcs.

Megpróbálhatja használni az alábbi állítást egy új alkalmazott beillesztésére az adatbázisába:

INSERT INTO alkalmazottak (azonosító, keresztnév, vezetéknév, kiterjesztés)
ÉRTÉKEK (12497, „Mike”, „Chapple”, 4201)

Normál körülmények között ez az állítás egy sort adna az Alkalmazottak táblához. Ha azonban az 12497 azonosítójú alkalmazott már létezik az adatbázisban, akkor a sor beillesztése sértené az elsődleges kulcs korlátozását, és a következő hibát eredményezné:

Ms 2627, 14. szint, 1. állapot, 1. sor
A „PK_employee_id” elsődleges kulcs korlátozásának megsértése. Nem helyezhető el duplikátumkulcs a „dbo.employees” objektumba.
A nyilatkozat megszűnt.

Bár ez a hiba biztosítja a probléma elhárításához szükséges információkat, két probléma van vele. Először is, az üzenet rejtélyes. Hibakódokat, sorszámokat és egyéb, az átlagfelhasználó számára érthetetlen információkat tartalmaz. Másodszor, és ami még ennél is fontosabb, a kijelentés megszakadását okozza, és az alkalmazás összeomlását okozhatja.

Alternatív megoldásként az utasítást egy TRY… CATCH utasításba kell csomagolni, az itt látható módon:

PRÓBA KEZDÉS
INSERT INTO alkalmazottak (azonosító, keresztnév, vezetéknév, kiterjesztés)
ÉRTÉKEK (12497, „Mike”, „Chapple”, 4201)
VÉGE TRY
FOGÁS KEZDÉSE
"ERROR:" + ERROR_MESSAGE () NYOMTATÁSA;
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Munkavállalói levél',
@recipients = '[email protected]',
@body = 'Hiba történt egy új alkalmazotti rekord létrehozásakor.',
@subject = 'Munkavállalói adatbázis hiba';
FOGÁS VÉGE

Ebben a példában az esetleges hibákról a parancsot végrehajtó felhasználó és a [email protected] e-mail cím egyaránt beszámol. A felhasználó számára megjelenített hiba:

Hiba: A „PK_employee_id” ELSŐDLEGES KULCS korlátozásának megsértése. 
Nem helyezhető el duplikátumkulcs a „dbo.employees” objektumba.
Levelek várakoznak.

Az alkalmazás futtatása normálisan folytatódik, lehetővé téve a programozó számára a hiba kezelését. A TRY / CATCH utasítás elegáns módja az SQL Server adatbázis-alkalmazásokban előforduló hibák proaktív észlelésének és kezelésének.

További információ

Ha többet szeretne megtudni a strukturált lekérdezési nyelvről, olvassa el cikkünket Az SQL alapjai.

instagram story viewer