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á realmente 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 as coisas para mim?
sql-server
sql-server-2008
error-handling
jaczjill
fonte
fonte
Error_State
e aError_Number
combinação fornecerá uma imagem mais clara sobre um erro. Dê uma olhada em outras funções relacionadas ao tratamento de erros aquiRespostas:
O objetivo dos estados de erro do SQL Server é que a equipe de desenvolvimento do SQL Server possa identificar no código o local exato em que os erros do sistema foram gerados, uma vez que muitos erros são gerados em vários locais.
Você como usuário final (ou seja, desenvolvedor de aplicativos usando o SQL Server) pode usar o estado transmitido de maneira 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 de você dizer 'mas posso ver a mensagem de erro', estou lhe dizendo uma palavra: internacionalização.
fonte
Não, não ajuda a descobrir nada sobre o local do erro. Aqui está um exemplo rápido. Se você tentar dividir por 0, você receberá uma mensagem de erro com vários detalhes:
Resultado:
Veja o chamado
State
, com um valor de 1?ERROR_STATE()
retorna esse valor. Então, se você usarTRY/CATCH
:Resultado:
Isso é tudo. Não é útil na maioria dos cenários. Sugiro que você leia mais sobre o tratamento de erros em geral antes de se aprofundar 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
fonte
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 fica óbvio qual é a causa).
fonte