从 TRY CATCH 内的单个语句捕获多个错误消息

2024-01-15

我正在对多个列和表运行一批语句,并希望检索有关发生的错误的信息。

该语句是类型更改(varchar 到 nvarchar),当它失败时,它似乎返回 2 个错误。

消息 5074,级别 16,状态 1,第 1 行 对象“DF_XXX_YYY”为 取决于列“YYY”。

消息 4922,级别 16,状态 9,第 1 行 ALTER TABLE ALTER COLUMN 描述失败,因为一个或多个对象 访问此栏目。

然而,当我把它包裹在一个TRY/CATCH块,然后选择ERROR_MESSAGE(),它只返回第二个错误:

ALTER TABLE ALTER COLUMN 描述失败,因为一个或多个 对象访问此列。

理想情况下,我希望它返回第一条消息,因为这提供了更多信息。

具体的SQL语句是:

begin try
    alter table XXX
    alter column YYY
    nvarchar(200)
end try
begin catch
    select ERROR_MESSAGE(), ERROR_LINE(), ERROR_NUMBER(), ERROR_PROCEDURE(), ERROR_SEVERITY(), ERROR_STATE()
end catch

有谁知道我如何检索信息更丰富的消息? (@@ERROR还返回第二个错误)


根据您的需要以及您运行此脚本的帐户的权限,您也许可以使用DBCC OUTPUTBUFFER(@@spid).

我在阅读 Erland Sommarskog 的著作时想到了这个想法错误处理文章 http://www.sommarskog.se/error-handling-I.html#textretrieve。他链接到一个程序spGET_ErrorMessage http://pjondevelopment.50webs.com/articles/retrieveErrorMessage.htm.

不幸的是这没有quite虽然我在 SQL Server 2008 上的测试脚本中工作,所以我不确定缓冲区格式是否已更改,但可能需要进行一些调整才能实现!

CREATE TABLE #foo
(
c INT DEFAULT(0)
)
ALTER TABLE #foo ALTER COLUMN c VARCHAR(10)

GO
EXEC spGET_LastErrorMessage

实际产量

Msg 5074, Level 16, State 1, Line 2
The object 'DF__#foo___________c__6DCC4D03' is dependent on column 'c'.

    Msg 4922, Level 16, State 9, Line 2
    ALTER TABLE ALTER COLUMN c failed because one or more objects access this column.

声称的输出

errNumber            errState    errLevel    errMessage                                                                               errInstance                                                                                                                     errProcedure    errLine
-------------------- ----------- ----------- ---------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------- --------------- -----------
5074                 1           16          The object 'DF__#foo___________c__6DCC4D03' is dependent on column 'c'.                  MARTINHP                                                                                                                        NULL            2
4922                 9           16          The object 'DF__#foo___________c__6DCC4D03' is dependent on column 'c'.ALTER TABL        MARTINHP 䄀䰀吀䔀刀 䌀伀䰀唀䴀一 挀 昀愀椀氀攀搀 戀攀挀愀甀猀攀 漀渀攀 漀爀 洀漀爀攀 漀戀樀攀挀琀猀 愀挀挀攀猀猀 琀栀椀         NULL            117
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 TRY CATCH 内的单个语句捕获多个错误消息 的相关文章

随机推荐

  • python cdll找不到模块

    我有一个由两个 dll 文件和一个 python 包装器组成的库 我目前的代码基于这三个文件 它们与我的主 python 文件位于同一父目录中 我现在尝试在继续开发之前重构一些东西 并希望将所述库代码移动到它自己的 lib 目录中 不幸的是
  • PowerShell 中从第一个到倒数第二个的数组索引

    如何获取从第一个到倒数第二个的数组元素范围 例如 array 1 2 3 4 5 array 0 will give me the first 1 array 2 will give me the second last 4 array 0
  • Windows Phone 7 SQL Server CE 行版本

    我在 Windows Phone 7 上的 SQL Server CE 中更新表时遇到问题 当我调用提交更改时 应用程序将关闭 没有任何异常或错误 Visual Studio 甚至仍在运行 删除rowversion专栏解决了这个问题 我环顾
  • 使用 ng-switch 时如何防止控制器重新加载

    在此示例中 使用 ng switch 我可以在不同视图之间切换 每个视图都分配有一个控制器 我在网上放了一个快速示例 http jsfiddle net FBHjZ 1 http jsfiddle net FBHjZ 1 看起来每次我切换视
  • ASP.NET MVC 项目和 App_Code 文件夹

    为什么 VS 解决方案资源管理器的 添加 ASP NET 文件夹 子菜单中没有选择 App Code 我知道您可以通过重命名新文件夹来手动创建一个新文件夹 但这里的理由是什么 这不是你应该放置 实用程序 或 服务层 类型类的地方吗 关于 M
  • 没有为类型定义序列化程序:System.Windows.Media.Media3D.Point3D

    我正在尝试使用 protobuf 网络序列化一些数据 在序列化过程中 我收到一条错误 指出没有为 Point3D 类型定义序列化 我发现一个类似的问题 但仍然无法实施和解决 链接如下 没有为类型定义序列化器 System Drawing C
  • 如何使用python将流上传到AWS s3

    我想创建一个从 S3 获取 zip 文件 可能包含 csv 文件列表 的 lambda 将其解压缩并上传回 s3 由于 lambda 受到内存 磁盘大小的限制 我必须将其从 s3 流式传输并返回到其中 我使用 python boto3 请参
  • 具有分段文件上传功能的 Spring REST API 不适用于可选参数

    我正在使用Spring框架 但不太熟悉它 我正在编写一个 REST API 特别是一个处理文件上传的 POST 方法 其中文件是可选的 我尝试简化该方法 但仍然存在问题 这是我所拥有的 RequestMapping method Reque
  • 如何将 javascript 转换为 LLVM IR?

    是否有 JavaScript 的 LLVM 后端 如果没有 其他将动态语言 类似于 javascript 转换为 LLVM IR 的工具也可以 因为我正在编写一个动态语言编译器 这样的工具可以帮助我找出一些功能是如何实现的 FTL JIT
  • R - “princomp”只能与比变量更多的单位一起使用

    我正在使用 R 软件 R Commander 对我的数据进行聚类 我的数据有一个较小的子集 包含 200 行和大约 800 列 尝试 kmeans 聚类并在图表上绘制时出现以下错误 princomp 只能与比变量更多的单位一起使用 然后我创
  • C# 中单元测试的生命周期是怎样的

    完整事件的顺序是什么MSTest在 Visual Studio 中用 C 运行单元测试 Ctrl R A 到目前为止我的想法是 1 跑步 AssemblyInitialize 2 随机运行 ClassInitialize 3 运行班级 Te
  • xpath 轴中的命名空间是什么

    我正在研究 XPath 轴 我能够理解以下所有轴 祖先 祖先或自我 属性 孩子 后裔 后代或自己 下列的 以下兄弟姐妹 父母 前 前兄弟 自己 我唯一无法理解的轴是 命名空间 谁能给我一个很好的例子并理解 命名空间 的实际作用 例子 Ope
  • 尝试更新 Twitter 状态时期望失败

    我似乎无法弄清楚这一点 无论我做什么 我都会收到 417 Expectation failed 错误 我看过的所有地方都说我需要删除 HttpWebRequest 的 Expect 标头 设置静态属性ServicePointManager
  • 通过我的程序路由所有数据包?

    我想构建一个通过我的应用程序路由所有网络流量 不仅仅是 HTTP 的应用程序 基本上 我想要的是给予我的应用程序的所有流量 它们永远不应该到达实际目标 我的应用程序应该处理这个 然后将其转发到服务器 输入也是如此 只是相反 服务器 gt 应
  • 如何根据 Google 表格中的单元格内容发送短信

    这是我上一个问题的后续如何循环 onEdit 函数从 Google 表格中的多行发送电子邮件 https stackoverflow com questions 56533837 how to loop an onedit function
  • PHP cURL 超时被忽略

    Using curl setopt 我已经设定CURLOPT CONNECTTIMEOUT MS到 1000 1 秒 并已设置另一个脚本休眠 5 秒 然后响应 200 OK 使用sleep 我称之为测试目的 我的脚本始终等待响应 即使它应该
  • 私有方法参数

    我有这个带有可选参数的方法 public static Test String connection Int32 retryInfiniteLoopGuard 0 有没有办法以某种方式标记retryInfiniteLoopGuard as
  • Sharepoint 2010 沙盒解决方案错误

    我对 Sharepoint Server 2010 沙箱解决方案有疑问 当我写作时 SPSite site new SPSite http win 5g8rm9qpjrp SPWeb web site OpenWeb 这两行代码 我有这样的
  • Erlang Linux 信号处理

    是否可以通过 Erlang 中的处理程序捕获 Linux 信号 例如 SIGUSR1 无需求助于 C 语言编写的驱动程序 不是真正的答案 2001年有人问 有没有人有unix的例子 Erlang 中的信号处理 我会 我喜欢制作一个负载均衡器
  • 从 TRY CATCH 内的单个语句捕获多个错误消息

    我正在对多个列和表运行一批语句 并希望检索有关发生的错误的信息 该语句是类型更改 varchar 到 nvarchar 当它失败时 它似乎返回 2 个错误 消息 5074 级别 16 状态 1 第 1 行 对象 DF XXX YYY 为 取