A hibák azonosítása a végrehajtás megszakítása nélkül
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 az SQL Serverre vonatkozik 2008-tól, az Azure SQL adatbázisból, az Azure SQL Data Warehouse-ból és a Parallel Data Warehouse-ból.
A TRY..CATCH bemutatása
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 fut, akkor az SQL Server egyszerűen továbbhalad. Ha azonban a TRY utasítás hibát generál, az SQL Server végrehajtja a CATCH utasítást, hogy kíméletesen kezelje a hibát.
Az alapszintaxis ezt a formát veszi:
BEGIN TRY {sql_statement | statement_block} END TRY BEGIN CATCH [{sql_statement | statement_block}] END CATCH [; ]TRY ... CATCH Példa
A legegyszerűbb megérteni a nyilatkozat használatát egy példa felhasználásával. Képzelje el, hogy Ön egy olyan humánerő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. sor A PRIMARY KEY megszorítása "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émamegoldáshoz szükséges információkat biztosítja, két probléma van vele. Először is, az üzenet rejtélyes. Ez magában foglalja a hibakódokat, vonalszámokat és egyéb információkat, amelyek az átlag felhasználó számára érthetetlenek. 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 csomagoljuk, az alábbiak szerint:
Ebben a példában minden előforduló hiba jelentkezik mind a parancsot futtató felhasználóhoz, mind a hr@foo.com e-mail címhez. A felhasználónak jelzett hiba az alábbiakban látható:
Hiba: PRIMARY KEY megsértése "PK_employee_id". A "dbo.employees" objektum nem helyezhető be duplikált kulcsba. Mail sorban áll.A legfontosabb, hogy az alkalmazás végrehajtása normálisan folytatódik, lehetővé téve a programozó számára, hogy kíméletesen kezelje 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, olvassa el a Bevezetés az SQL-be .