Neste artigo estaremos falando sobre os blocos de transação implementados no SQL Server para tratamento de erro, anteriormente no SQL Server 2000 os tratamentos eram realizados através de @@ERROR, com a implementação de TRY…CATCH temos a opção de dividir em blocos instrução e tratamento de erro. exame 70-461
Formação dos blocos:
TRY – Instrução SQL Server que deseja executar
CATCH – Comando para tratamento de erros em TRY
Então, vamos a sintaxe básica da instrução TRY…CATCH:
Begin Try
[Instrução SQL]
End Try
Begin Catch
[Tratamento de possivel erro]
End Catch
No exemplo abaixo criamos uma tabela com uma coluna varchar(4) vejamos o que ocorre quando tentamos inserir a palavra “teste” nesta coluna:
Use GuiaDba
Go
if OBJECT_ID ('teste') Is not Null
Drop table teste
Go
Create table teste (texto varchar(5))
Go
Begin Try
Insert Into teste values ('teste')
End Try
Begin Catch
Insert Into teste values ('error')
End Catch
Select * from teste
No caso abaixo vamos mudar um pouco para provocar um erro, estaremos alterando a palavra teste para “teste1”, o erro será provocado devido a tentarmos inserir uma string com 5 caracteres em um uma coluna varchar(4).
Begin Try
Insert Into teste values ('teste1')
End Try
Begin Catch
Insert Into teste values ('error')
End Catch
No dia a dia para transações como a realizada acima não utilizamos esse tipo de tratamento, mas em blocos grandes de execução é comum vermos a presença de TRY..CATCH
Abaixo segue uma lista de funções que são comuns no bloco CATCH:
ERROR_NUMBER () retorna o número do erro.
ERROR_MESSAGE () retorna o texto completo da mensagem de erro. O texto inclui os valores fornecidos para qualquer parâmetro substituível, como extensões, nomes de objetos ou horas.
ERROR_SEVERITY () retorna a severidade de erro.
ERROR_STATE() retorna o número do estado do erro.
ERROR_LINE () retorna o número de linha dentro da rotina que causou o erro.
ERROR_PROCEDURE() retorna o nome do procedimento armazenado ou do gatilho no qual ocorreu o erro.