Unha guía paso a paso para usar TRY ... CATCH para manipular erros do servidor SQL

Identificar erros sen interromper a execución

A instrución TRY ... CATCH en Transact- SQL detecta e xestiona as condicións de erro nas súas aplicacións de base de datos. Esta declaración é a pedra angular do manexo de erros de SQL Server e é unha parte importante do desenvolvemento de aplicacións de base de datos robustas. TRY ... CATCH aplícase a SQL Server a partir de 2008, Azure SQL Database, Azure SQL Data Warehouse e Parallel Data Warehouse.

Presentando TRY..CATCH

TRY ... CATCH funciona permitiéndolle especificar dúas instrucións de transact-SQL: unha que quere "probar" e outra para usar para "atrapar" os erros que poidan xurdir. Cando SQL Server atopa unha declaración TRY ... CATCH, inmediatamente executa a declaración incluída na cláusula TRY. Se a instrución TRY execútase con éxito, SQL Server simplemente móvese. Non obstante, se a instrución TRY xera un erro, SQL Server executa a instrución CATCH para tratar con graza o erro.

A sintaxe básica toma este formulario:

COMENZAR PROCESAR {sql_statement | statement_block} END TRY BEGIN CATCH [[sql_statement | statement_block}] END CATCH [; ]

TRY ... CATCH Exemplo

É máis fácil comprender o uso desta declaración mediante o uso dun exemplo. Imaxina que es o administrador dunha base de datos de recursos humanos que contén unha táboa chamada "Empregados" que contén información sobre cada un dos empregados da súa organización. Esa táboa usa un número de ID de empregado enteiro como clave principal . Podería tentar empregar a seguinte declaración para inserir un novo empregado na súa base de datos:

INSERT INTO empregados (id, first_name, last_name, extension) VALORES (12497, 'Mike', 'Chapple', 4201)

En circunstancias normais, esta afirmación engadiría unha fila á táboa dos empregados. Non obstante, se un empregado con ID 12497 xa existe na base de datos, inserir a fila violaría a restrición da clave primaria e producirá o seguinte erro:

Msg 2627, Nivel 14, Estado 1, Liña 1 Violación da restrición de PRIMARY KEY 'PK_employee_id'. Non se pode inserir a chave duplicada no obxecto 'dbo.employees'. A declaración foi cancelada.

Aínda que este erro forneza a información que precisa para solucionar o problema, hai dous problemas nela. En primeiro lugar, a mensaxe é críptica. Inclúe códigos de erro, números de liña e outra información inintelixible para o usuario medio. En segundo lugar, e máis importante, fai que a declaración se aborte e podería causar unha falla de aplicación.

A alternativa é envolver a declaración nunha declaración TRY ... CATCH, como se mostra a continuación:

Comezar a inserir INTO empregados (id, first_name, last_name, extension) VALORES (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN IMPRIMIR IMPRIMIR 'Error:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Correo empregado', @recipients = 'hr@foo.com', @body = 'Produciuse un erro creando un novo rexistro de empregado.', @subject = 'Erro de duplicación do ID do emprego'; END CATCH

Neste exemplo, os erros que se producen denuncian tanto o usuario que executa o comando como o enderezo de correo electrónico hr@foo.com. O erro mostrado ao usuario aparece a continuación:

Erro: Violación da restrición de PRIMARY KEY 'PK_employee_id'. Non se pode inserir a chave duplicada no obxecto 'dbo.employees'. Correo en cola.

Máis importante aínda, a execución da aplicación continúa normalmente, permitindo que o programador xestione con gracia o erro. O uso da declaración TRY ... CATCH é unha forma elegante de detectar e manipular de forma proactiva os erros que se producen nas aplicacións de bases de datos de SQL Server.

Aprender máis

Se desexa obter máis información sobre o idioma de consulta estruturada, lea Introducción a SQL .