【发布时间】:2020-01-16 11:32:36
【问题描述】:
我想在运行时处理我的程序中的错误
BACKUP DATABASE [MyDb] TO DISK = 'c:\Test.bak' WITH COMPRESSION;
命令。
如果我在没有TRY/CATCH 的情况下运行此命令,我会收到两个错误:
消息 3201,第 16 级,状态 1,第 24 行
无法打开备份设备“c:\Test.bak”。操作系统错误 5(访问被拒绝。)。消息 3013,第 16 级,状态 1,第 24 行
BACKUP DATABASE 异常终止。
但是当我在此处显示的语句中使用TRY/CATCH 时,我只收到此错误的第二部分:
BEGIN CATCH
select ERROR_MESSAGE()
END CATCH
返回的错误只是:
BACKUP DATABASE 异常终止。
我怎样才能得到两部分的错误?
【问题讨论】:
-
简短的回答是您无法使用 T-SQL TRY/CATCH 获得所有错误消息。您需要放弃 T-SQL TRY/CATCH 并在客户端应用程序中获取错误,例如 SSMS 或 SQLCMD。
-
@GSerg 真的我想在我遇到错误时在我的日志表中记录错误消息。使用 THROW 命令我无法实现这个目标。
-
@M.R.Sadeghi,要将所有错误消息记录到表中,您需要在客户端应用程序中执行此操作。请注意,Ola Hallengren's SQL Server Maintenance Solution 正是为备份和索引维护做的,所以考虑使用它而不是重新发明轮子。
-
作为更多参考,Erland 在他的博客的error handling section 中讨论了这个确切的情况。
标签: sql-server try-catch