Preciso simular erro no Sql Server:
“Msg 0, Level 20 A severe error occurred on the current command”
porque nossos desenvolvedores precisam lidar com isso no aplicativo.
Como posso simular/acionar esse tipo de erro? (Também posso tentar no meu localhost).
Este erro é retornado pela API do cliente, não pelo SQL Server, quando algo ruim acontece como uma violação de acesso ou uma conexão interrompida que fecha a conexão no lado do servidor. É por isso que o ID da mensagem é zero em vez de um em
sys.messages
. `Erland Sommarskog chama isso de falsa mensagem de erro em seu artigo .RAISERROR
com uma gravidade de 20 (que requerWITH LOG
e sysadmin ou permissões de alteração de rastreamento) pode simular o erro dependendo da API do cliente que você está usando. Eu vejo o erro no SSMS (que usa a API SqlClient do framework .NET) depois de executar o comando abaixo, junto com outras mensagens de erro. Observe que uma exceção SQL pode gerar várias mensagens de erro, incluindo esta, portanto, você precisará examinar os erros retornados para aquele(s) de interesse.Você deve ser capaz de usar RAISERROR ou THROW. Há um post existente aqui que fala sobre as diferenças de cada um. No entanto, você não pode gerar uma Msg 0 com eles, portanto, não tenho certeza se você poderá obter o resultado exato que está procurando. Abaixo está mais documentação sobre cada comando.
RAISERROR
MS Docs - RAISERROR
LANÇAR
MS Docs - THROW
No entanto, em vez de focar na mensagem de erro exata, sua equipe de desenvolvimento deve certificar-se de que eles estão aceitando corretamente todos os erros de SQL em geral. Se eles conseguirem capturar corretamente os erros de SQL que são retornados, deve ser fácil para eles determinar como lidar com cada erro exclusivo, como este. Nesse caso, apenas gere qualquer erro de SQL desejado e faça com que eles mostrem que capturam a mensagem como você esperaria.
O erro específico na pergunta é causado apenas por uma exceção no servidor - um bug do produto - portanto, será difícil simular exatamente.