我在Try / Catch中封装了一个备份数据库命令,看起来错误信息正在某处丢失。例如:

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

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

鉴于:

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

...仅出错: BACKUP DATABASE异常终止。

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

有帮助吗?

解决方案

这是try / catch的限制。

如果仔细查看执行

生成的错误
 BACKUP DATABASE NonExistantDB TO DISK = 'C:\TEMP\NonExistantDB.bak'

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

  

无法在数据库'NonExistantDB'的sysdatabases中找到条目。禁止入内   发现有这个名字。确保正确输入名称。

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

其他提示

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

SQL 2005错误处理

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top