La instrucció TRY … CATCH de Transact-SQL detecta i gestiona les condicions d'error en les aplicacions de la base de dades. Aquesta afirmació és la pedra angular del maneig d'errors del servidor SQL i és una part important del desenvolupament d'aplicacions robustes de base de dades. TRY … CATCH s'aplica a SQL Server a partir de 2008, Azure SQL Database, Azure SQL Data Warehouse i Parallel Data Warehouse.
Presentant TRY … CATCH
TRY … CATCH funciona permetent especificar dues instruccions de transact-SQL: una que vulgueu "provar" i una altra que s'utilitzi per "captar" els errors que puguin sorgir. Quan SQL Server troba una instrucció TRY … CATCH, immediatament executa la instrucció inclosa a la clàusula TRY. Si la instrucció TRY s'executa amb èxit, SQL Server es mou. Tanmateix, si la instrucció TRY genera un error, SQL Server executa la instrucció CATCH per manejar l'error amb gràcia.
La sintaxi bàsica pren aquesta forma:
COMI TROBAR-HI bloc d'instruccions END TRYComençar a capturarsql_statementEND CATCH ; És fàcil entendre l'ús d'aquesta afirmació a través d'un exemple. Imagineu que sou l'administrador d'una base de dades de recursos humans que conté una taula anomenada "Empleats", que conté informació sobre cadascun dels empleats de la vostra organització. Aquesta taula utilitza un número d'identificació d'empleat sencer com a clau principal. Podeu intentar utilitzar la instrucció següent per inserir un nou empleat a la vostra base de dades: INSERT INTO empleats (id, first_name, last_name, extension)VALORS (12497, 'Mike', 'Chapple', 4201)
En circumstàncies normals, aquesta declaració afegiria una fila a la taula d'empleats. Tanmateix, si un empleat amb l'ID 12497 ja existeix a la base de dades, la inserció de la fila infringeix la restricció de la clau principal i provocarà el següent error: Missatge 2627, Nivell 14, Estat 1, Línia 1Violació de la restricció PRIMARY KEY 'PK_employee_id'. No es pot inserir la clau duplicada a l'objecte 'dbo.employees'.La declaració s'ha cancel·lat.
Tot i que aquest error us proporciona la informació que necessiteu per resoldre el problema, hi ha dos problemes. En primer lloc, el missatge és críptic. Inclou codis d'error, números de línia i altra informació incomprensible per a l'usuari mitjà. En segon lloc, i el que és més important, fa que la declaració avorti i que pugui causar un bloqueig d'aplicació.L'alternativa és embolicar la declaració en una declaració TRY … CATCH, com es mostra aquí: COMI TROBAR-HIINSERT INTO empleats (id, first_name, last_name, extension)VALORS (12497, 'Mike', 'Chapple', 4201)END TRYComençar a capturarIMPRESSIÓ 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Correu d'empleats',@recipients = '[email protected]',@body = 'S'ha produït un error en crear un nou registre d'empleat.',@subject = 'Error de duplicació de l'identificador d'empleat';END CATCH
En aquest exemple, es registren els errors que es produeixen tant a l'usuari que executa l'ordre com a l'adreça de correu electrònic [email protected]. L'error mostrat a l'usuari és: Error: infracció de la restricció PRIMARY KEY 'PK_employee_id'. No es pot inserir la clau duplicada a l'objecte 'dbo.employees'.Correu en cua.
L'execució de l'aplicació continua amb normalitat, permetent al programador gestionar l'error. Ús de la instrucció TRY … CATCH és una forma elegant de detectar i gestionar de manera proactiva els errors que es produeixen en les aplicacions de base de dades del servidor SQL. Si voleu obtenir més informació sobre l'idioma de consulta estructurada, consulteu Introducció a SQL. TRY … CATCH Exemple
Aprenent més