Eu li que ERROR_STATE()
pode ajudar a distinguir entre diferentes estados/locais no código-fonte onde o mesmo tipo de erro pode ocorrer. Mas não está muito claro para mim como isso pode ser útil.
Estados MSDN:
ERROR_STATE()
Retorna o número do estado do erro que causou a execução do bloco CATCH de uma construção TRY…CATCH.
Como pode ser realmente usado? Alguém pode me dar um exemplo, os fornecidos neste artigo de referência realmente não ajudam a explicar bem as coisas para mim?
O objetivo dos estados de erro do SQL Server é que a equipe de desenvolvimento do SQL Server seja capaz de identificar no código o local exato em que os erros do sistema foram gerados, visto que muitos erros são gerados em vários locais.
Você, como usuário final (ou seja, desenvolvedor de aplicativos usando SQL Server), pode usar o estado transmitido de forma semelhante
RAISERROR
para que o suporte do produto possa identificar o local em que um procedimento gera um erro, por exemplo:Veja como os dois estados permitem distinguir posteriormente qual caso de erro foi atingido. Antes que você diga 'mas posso ver a mensagem de erro', digo uma palavra: internacionalização.
Não, isso não ajuda você a descobrir onde ocorreu o erro. Aqui está um exemplo rápido. Se você tentar dividir por 0, receberá uma mensagem de erro com vários detalhes:
Resultado:
Veja aquele chamado
State
, com um valor de 1?ERROR_STATE()
retorna este valor. Então, se você usarTRY/CATCH
:Resultado:
Isso é tudo. Não é útil na maioria dos cenários. Sugiro ler mais sobre tratamento de erros em geral antes de mergulhar muito fundo em funções específicas que parecem úteis.
http://msdn.microsoft.com/en-us/library/ms175976.aspx
http://www.sommarskog.se/error_handling_2005.html
Resposta curta - não pode. Um ERROR_STATE é essencialmente uma subdivisão de um ERROR_NUMBER. Ele não pode dizer qual linha de código causou o erro (exceto na medida em que ERROR_NUMBER e ERROR_STATE juntos informam a causa do erro e, então, torna-se óbvio qual é a causa).