2

我在 Try/Catch 中封装了一个备份数据库命令,似乎错误消息在某处丢失。例如:

BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'

..给出错误:
无法在 sysdatabases 中找到数据库“NonExistantDB”的条目。未找到具有该名称的条目。确保输入的名称正确。BACKUP DATABASE 异常终止。

然而:

BEGIN TRY
    BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'
END TRY
BEGIN CATCH
    PRINT ERROR_MESSAGE()
END CATCH

...只给出错误: 备份数据库异常终止。

有没有办法获得完整的错误消息,或者这是 try/catch 的限制?

4

2 回答 2

3

这是 try/catch 的限制。

如果仔细查看执行产生的错误

 BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'

你会发现有两个错误被抛出。第一个是 msg 911,它指出

在 sysdatabases 中找不到数据库“NonExistantDB”的条目。未找到具有该名称的条目。确保输入的名称正确。

第二个是您正在显示的 3013 消息。基本上,SQL 只返回最后一个错误。

于 2008-10-21T15:22:12.797 回答
0

这是我刚刚遇到的 SQL 2005 中的 try/catch 块的限制。我不知道它在 2008 年是否仍然存在。

SQL 2005 错误处理

于 2010-07-06T20:23:58.657 回答