微软 SQL Server 2005+
执行数据库备份时,我可能会在 SSMS 中收到此错误:
消息 3202,级别 16,状态 2,第 5 行
写入“c:\dbbackup\dummy.bak”失败:112(磁盘空间不足。)
这里,112是操作系统错误代码,括号中的文本是操作系统错误文本。
我的问题是:如何以编程方式获取此信息?
如果我将 BACKUP 命令放在 TRY-CATCH block 中,那么我可以使用 ERROR_*() 函数,但它们都不包含此信息。
提到的 ERROR_*() 函数是:
- ERROR_NUMBER(),
- ERROR_消息()
- ERROR_严重性()
- ERROR_状态()
- ERROR_程序()
- ERROR_LINE()
我只能捕获错误消息第一行中显示的信息(Msg 3202...等)以及 SQL 错误文本:“BACKUP DATABASE 异常终止”(这是由 ERROR_MESSAGE 返回的) () 函数)。
最佳答案
Catch block 将仅返回最后一个/终止错误。有一个连接项目:https://connect.microsoft.com/SQLServer/feedback/details/277335/incorrect-error-number-passed-to-catch-block#
SSMS 是一个 .net 应用程序,使用 SqlExeption 来捕获批处理中的所有异常。 Errors 属性是一个 SqlErrorCollection,它将包含所有错误(取决于 XACT_ABORT 设置)。目前,通过使用 TRY/CATCH,T-SQL 无法实现这一点
关于sql-server - 使用T-SQL,如何捕获操作系统错误代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23992013/