Sql server SQL Server中的内部mesage TRY/CATCH

Sql server SQL Server中的内部mesage TRY/CATCH,sql-server,try-catch,Sql Server,Try Catch,我希望在运行时处理过程中的错误 BACKUP DATABASE [MyDb] TO DISK = 'c:\Test.bak' WITH COMPRESSION; 指挥部 如果在不使用TRY/CATCH的情况下运行此命令,则会出现两个错误: Msg 3201,16级,状态1,第24行 无法打开备份设备“c:\Test.bak”。操作系统错误5(访问被拒绝) Msg 3013,第16级,状态1,第24行 备份数据库正在异常终止 但是当我在这里显示的语句中使用TRY/CATCH时,我只得到了这个错误

我希望在运行时处理过程中的错误

BACKUP DATABASE [MyDb] TO DISK = 'c:\Test.bak' WITH COMPRESSION;
指挥部

如果在不使用TRY/CATCH的情况下运行此命令,则会出现两个错误:

Msg 3201,16级,状态1,第24行
无法打开备份设备“c:\Test.bak”。操作系统错误5(访问被拒绝)

Msg 3013,第16级,状态1,第24行
备份数据库正在异常终止

但是当我在这里显示的语句中使用
TRY/CATCH
时,我只得到了这个错误的第二部分:

BEGIN CATCH
        select ERROR_MESSAGE()
END CATCH
返回的错误仅限于:

备份数据库正在异常终止


如何获得两部分错误?

很明显,我误解了这个问题,所以请擦掉这个

SELECT   
     ERROR_NUMBER() AS ErrorNumber  
    ,ERROR_SEVERITY() AS ErrorSeverity  
    ,ERROR_STATE() AS ErrorState  
    ,ERROR_LINE () AS ErrorLine  
    ,ERROR_PROCEDURE() AS ErrorProcedure  
    ,ERROR_MESSAGE() AS ErrorMessage;  

简而言之,您无法使用T-SQL TRY/CATCH获取所有错误消息。您需要放弃T-SQL TRY/CATCH并在客户端应用程序中获取错误,如SSMS或SQLCMD。可能存在@GSerg的重复。当我遇到错误时,我希望在日志表中记录错误消息。使用THROW命令,我无法实现此目标。@M.R.Sadeghi,要将所有错误消息记录到一个表中,您需要在客户端应用程序中这样做。注意,对于备份和索引维护确实如此,所以请考虑使用它,而不是重新发明轮子。为了进一步的引用,Erand在他的博客中讨论了这个确切的情况。我已经去掉了也许不相关的例子。感谢这些函数中没有一个允许检索错误链中上一个错误的错误消息。