2008-10-21 78 views
2

我已经在Try/Catch中封装了一个备份数据库命令,看起来错误消息正在丢失某处。例如:SQL Server 2005 - Error_Message()没有显示完整的消息

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

..gives错误:
无法找到在sysdatabases中为数据库 'NonExistantDB' 条目。没有找到该名称的条目。确保名称输入正确。 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的限制吗?

回答

3

这是try/catch的限制。

如果您在生成该错误仔细看,通过执行

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

你会发现,有一些抛出两个错误。首先是msg 911,其状态为

Could not locate entry in sysdatabases for database 'NonExistantDB'. No entry found with that name. Make sure that the name is entered correctly.

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

+0

它看起来像你的权利,但不是关于它作为try/catch的限制。我刚刚使用@@ ERROR运行它,并且仅返回最后一个错误。不是味精911.那么,我们该如何得到第一个错误,或者所有的错误。 – HAdes 2008-10-21 15:58:55

0

这是一个限制,那我只是碰到了自己,在SQL 2005 try/catch块的,我不知道它是否仍然存在,或没有在2008年

SQL 2005 Error Handling