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

标签 sql-server error-handling

微软 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/

相关文章:

c# - ASP.NET MVC 4 : Error received when trying to insert datetime field in Sql Server Database from input text box

jquery - 如何在asp.net中构建数据库驱动的Jquery下拉菜单

sql-server - 从连接表中选择时如何避免死锁?

exception-handling - 网页设计中的错误处理

ruby-on-rails - React形式的服务器端Rails模型验证

python - 在Django中使用计数功能获取数据

c# - stackoverflow 中的标签列表

sql-server - 关于在 SQL Server 上为各种查询创建单列索引

PHP 将 "Call to a member function on a non-object"变成异常

php - fatal error PHP,Pear?