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?

Foi útil?

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.

SQL 2005 Tratamento de erros

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top