O try catch recém-adicionado no sql server 2005 pode facilmente capturar exceções. Vou dar uma olhada nele hoje e resumir os pontos principais como segue
.
{instrução_sql |
bloco_de_instrução }
FINALIZAR TENTATIVA
COMEÇAR A CAPTURA
{instrução_sql |
bloco_de_instrução }
FIM DA CAPTURA
, semelhante ao uso do tratamento de exceções em linguagens comuns, mas deve-se observar que o SQL SERVER captura apenas exceções que não são sérias. Quando exceções como o banco de dados não podem ser conectadas, etc., um exemplo é: COMECE A TENTAR
DECLARE @X INT
-- Divida por zero para gerar erro
DEFINIR @X = 1/0
PRINT 'Comando após erro no bloco TRY'
FINALIZAR TENTATIVA
COMEÇAR A CAPTURA
IMPRIMIR 'Erro detectado'
FIM DA CAPTURA
PRINT 'Comando após blocos TRY/CATCH'
Além disso, try catch pode ser aninhado em Begin TRY
excluir do GrandParent onde Name = 'John Smith'
print 'Avô excluído com sucesso'
Finalizar tentativa
Comece a pegar
Imprimir 'Erro ao excluir registro dos avós'
Comece a tentar
excluir do pai onde GrandParentID =
(selecione um ID distinto de GrandParent onde Name = 'John Smith')
Imprimir 'pai excluído com sucesso'
Finalizar tentativa
Comece a pegar
print 'Erro ao excluir pai'
Comece a tentar
excluir do filho onde ParentId =
(selecione um ID distinto de Pai onde GrandParentID =
(selecione um ID distinto de GrandParent onde Name = 'John Smith'))
imprimir 'Criança excluída com sucesso'
Finalizar tentativa
Comece a pegar
Imprimir 'Erro ao excluir filho'
Fim da captura
Fim da captura
Fim da captura
Além disso, o SQL SERVER 2005 fornece métodos de classe de erro no mecanismo de exceção para facilitar a depuração. Ele é extraído da seguinte forma, o que é relativamente simples e não será explicado: Retorna um número associado ao erro.ERROR_SEVERITY(): Retorna a gravidade do erro.ERROR_STATE(): Retorna o número do estado do erro associado ao erro.ERROR_PROCEDURE(): Retorna o nome do procedimento armazenado ou gatilho no qual o erro ocorreu.ERROR_LINE(): Retorna o número da linha dentro do rotina com falha que causou o erro. ERROR_MESSAGE(): Retorna o texto completo da mensagem de erro. O texto inclui os valores fornecidos para quaisquer parâmetros substituíveis, como comprimentos, nomes de objetos ou tempos. usando o método de classe de erro BEGIN TRY
DECLARE @X INT
-- Divida por zero para gerar erro
DEFINIR @X = 1/0
PRINT 'Comando após erro no bloco TRY'
FINALIZAR TENTATIVA
COMEÇAR A CAPTURA
IMPRIMIR 'Erro detectado'
SELECIONE ERROR_NUMBER() ERNumber,
ERROR_SEVERITY() Erro_Severidade,
ERROR_STATE() Erro_State,
ERROR_PROCEDURE() Erro_Procedure,
ERROR_LINE() Erro_Line,
ERROR_MESSAGE() Mensagem_Erro
FIM DA CAPTURA
PRINT 'Comando após blocos TRY/CATCH'
Finalmente, saída de erro detectado
Err_Num Err_Sev Err_State Err_Proc Err_Line Err_Msg
------- ------- --------- --------- ------- ----------------------------------
8134 16 1 NULL 4 Erro de divisão por zero encontrado
Fonte: jackyrong BLOG.