SQL Server 2005 - Error_Message () não mostrando mensagem completa
-
03-07-2019 - |
Pergunta
Eu tenho encapsulado um comando de banco de dados de backup em um try / catch e parece que a mensagem de erro está sendo perdida em algum lugar. Por exemplo:
BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
.. dá erro:
Não foi possível localizar entrada no sysdatabases banco de dados 'NonExistantDB'. Não foram encontradas entradas com esse nome. Certifique-se de que o nome foi digitado corretamente. BACKUP DATABASE está finalizando de forma anormal.
Considerando o seguinte:
BEGIN TRY
BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH
... só dá erro:. BACKUP DATABASE está finalizando de forma anormal
Existe uma maneira de obter a mensagem de erro completa ou isso é uma limitação do try / catch?
Solução
É uma limitação do try / catch.
Se você olhar cuidadosamente para o erro gerado pelo executando
BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
Você verá que há dois erros que são jogados. O primeiro é msg 911, que estados
Não foi possível localizar entrada no sysdatabases para banco de dados 'NonExistantDB'. Entrada proibida encontrada com esse nome. Certifique-se de que o nome foi digitado corretamente.
A segunda é a mensagem de 3013 que você está exibindo. Basicamente, SQL só é retornar o último erro.
Outras dicas
É uma limitação, que eu apenas corri para dentro de mim, do bloco try / catch no SQL 2005. Eu não sei se ainda existe ou não em 2008.