使用T-SQL,我如何捕获操作系统错误代码?

时间:2014-06-02 10:06:23

标签: sql-server error-handling

Microsoft SQL Server 2005 +

执行数据库备份时,我可能会在SSMS中收到此错误:

消息3202,级别16,状态2,行5

写上" c:\ dbbackup \ dummy.bak"失败:112(磁盘空间不足。)

此处, 112 是操作系统错误代码,括号中的文本是操作系统错误文本。

我的问题是:如何以编程方式获取此信息?

如果我将BACKUP命令放在TRY-CATCH块中,那么我可以使用ERROR _ *()函数,但它们都不包含此信息。

提到的ERROR _ *()函数是:

  • ERROR_ NUMBER (),
  • ERROR_的 MESSAGE ()
  • ERROR_的严重性()
  • ERROR_的 STATE ()
  • ERROR_的 PROCEDURE ()
  • ERROR_ 订单()

我只能捕获错误消息第一行(Msg 3202 ...等)中显示的信息以及SQL错误文本:" BACKUP DATABASE异常终止" (这是由ERROR_MESSAGE()函数返回的。)

2 个答案:

答案 0 :(得分:2)

Catch块仅返回最后一个/终止错误。有一个Connect项目: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

答案 1 :(得分:0)

Janos Berke很善良并回答了这个问题。链接:http://iamberke.com/post/2014/06/14/egymast-koveto-tobb-sql-hiba-kezelese.aspx#.U60vKr1V_cc 文本是匈牙利语,但问题是基本上这不能在纯TSQL中完成:您需要一个SQLException .NET对象来捕获多个错误。示例代码可以在链接下找到。 谢谢Janos。