Microsoft SQL Server 2005 +
执行数据库备份时,我可能会在SSMS中收到此错误:
消息3202,级别16,状态2,行5
写上" c:\ dbbackup \ dummy.bak"失败:112(磁盘空间不足。)
此处, 112 是操作系统错误代码,括号中的文本是操作系统错误文本。
我的问题是:如何以编程方式获取此信息?
如果我将BACKUP命令放在TRY-CATCH块中,那么我可以使用ERROR _ *()函数,但它们都不包含此信息。
提到的ERROR _ *()函数是:
我只能捕获错误消息第一行(Msg 3202 ...等)中显示的信息以及SQL错误文本:" BACKUP DATABASE异常终止" (这是由ERROR_MESSAGE()函数返回的。)
答案 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。