如何正确使用 SET XACT_ABORT ON

2023-11-26

我们最近被空降到一个新的 ETL 项目,该项目的代码非常糟糕。 我手中有一个包含 700 行和各种更新的查询。

我想用它来调试它SET XACT_ABORT ON;目标是如果只有一个事务失败则回滚所有事务。

但我找到了几种将其存档在 StackOverflow 上的方法,例如this:

BEGIN TRANSACTION;
BEGIN TRY

-- Multiple sql statements goes here

COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
END CATCH

or this:

BEGIN TRY
BEGIN TRANSACTION

-- Multiple sql statements goes here

COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT(ERROR_MESSAGE())
ROLLBACK TRANSACTION
END CATCH

这些用途都没有SET XACT_ABORT ON;.

我不明白,是SET XACT_ABORT ON与使用相同BEGIN TRY BEGIN TRANSACTION?

我可以只使用:

SET XACT_ABORT ON;

-- Multiple sql statements goes here

并摆脱所有:

BEGIN TRANSACTION;
BEGIN TRY

?

另外,我应该使用BEGIN TRANSACTION进而BEGIN TRY或者相反?


这是不一样的。它决定何时抛出错误。

你应该总是使用SET XACT_ABORT ON,因为它更加一致;几乎总是,错误会停止执行并抛出错误。否则,一半的事情会抛出错误,而另一半则继续执行。

有一个伟大的article关于整个主题Erland Sommarskog 的网站,如果你去这点您将看到一个描述这种奇怪行为的表格。总之,我推荐错误处理的通用模式,因为它有很好的文档记录,并且为您提供了根据其自己的文档对其进行调整的机会。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确使用 SET XACT_ABORT ON 的相关文章

  • mssql 的 UUID 疯狂

    我的数据库条目有一个 UUID 及其值 使用 Microsoft SQL Server Management Studio 提取 CDF86F27 AFF4 2E47 BABB 2F46B079E98B 将其加载到我的 Scala 应用程序
  • SQL Server 2014执行计划创建需要很长时间(旧版本中很快)

    我在 SQL Server 2014 中遇到一个查询问题 第一次运行该查询时 需要很长时间才能生成执行计划 奇怪的是 它在 SQL Server 的所有早期版本 2012 2008 R2 2008 等 中都运行良好 它似乎与所涉及的表之一上
  • ROUTINE_NAME 和 SPECIFIC_NAME 之间有什么区别?

    在 INFORMATION SCHEMA ROUTINES 视图中 存在 ROUTINE NAME 和 SPECIFIC NAME 按照MSDN http msdn microsoft com en us library ms188757
  • SQL Server 数据归档解决方案

    我正在寻找一种解决方案来存档数据库中存在的数据 我的数据库是 SQL Server 2008 大约有 250 个表 我搜索网络并找到以下链接 http www dbazine com sql sql articles charran13 h
  • 从 Visual Studio 调试 SQL Server 2005 中的存储过程?

    我在这里和其他地方看到很多令人沮丧的问题 但没有明确的答案 我试图让存储过程进行调试 但没有成功 客户端 VS2005或VS2008 两者都不起作用 当我从存储过程上下文菜单中选择 步入存储过程 时 我在调试窗口中看到 已被用户取消 这就是
  • 使用 sql 查询选择最近 30 天

    我正在查找过去 30 天内周一 周二 周三 周四 周五 周六 周日的数量 我可以在没有实际数据库表的情况下选择最近 30 天的日期和星期几吗 就像是 SELECT everything between convert date GETDAT
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 无法连接 AWS - RDS 数据库:SQL Server 2012 Express

    我是 AWS 世界的新手 我在访问 RDS US East 1a 上的 Microsoft SQL Server 2012 Express 11 00 5058 实例时遇到问题 当我创建数据库实例时 我能够访问它 创建一些表 传输数据等 一
  • DbContext 和连接池

    在我继承的应用程序中 基本控制器中有这个 应用程序中的所有其他控制器都继承自该控制器 public BaseController db new MyDbContext db Database Log s gt Debug Write s p
  • SQL SERVER - COALESCE() 函数的问题

    我有一个由存储过程包装的 SQL 函数 ALTER FUNCTION dbo GetObjList filterUID int NULL filterSID varchar 32 NULL RETURNS TABLE AS RETURN S
  • 将 XML 文件导入 SQL Server(不使用 BULK)

    我正在尝试将数据从 XML 文件导入到数据库中 我使用了一个测试脚本BULK INSERT 但是当我在实时数据库上进行测试时 权限BULK被禁用 尝试 1 BULK INSERT XMLTable FROM C Radu test xml
  • 如何使用Dapper获取存储过程的返回值?

    我在 asp net mvc 4 项目 net f w 4 6 1 中使用 Dapper 使用 sql server 2016 Express
  • 如何让SqlDataReader获取time(7)类型变量?

    我有一个像这样的 SQL Server 表 userID int xCoordinate int yCoordinate int recordTime time 7 itemId int 我想获取给定用户的所有录制时间 现在假设为用户 1
  • 使用递归 CTE 生成嵌套第 n 层 JSON SQL Server

    我有以下结构的数据 我想使用父属性 id 关系生成嵌套 JSON 所需的输出 propertyID 1 title foo class typeid 150 value bar children propertyID 2 title foo
  • TFS 2017 如何使用 SQL 查询工作项

    我正在寻找一种使用 SQL 选择直接从 TFS 的 SQL 数据库查询工作项的方法 对于 TFS 2010 您可以使用一些数据库视图来实现此目标 TFS2010 如何在关系仓库上使用 SQL 查询工作项 https blogs msdn m
  • 限制 SQL 查询的响应时间

    我在这里发布了一个关于我的 gridview 绑定的问题 将GridView与多条记录绑定 https stackoverflow com questions 5599704 bind gridview with many records
  • T-SQL 中的异步存储过程调用

    如何从另一个存储过程对存储过程进行异步调用 假设我有两个存储过程 SP1 和 SP2 这是一个长时间运行的存储过程 需要很长时间执行 并且不返回任何结果 存储过程SP1定义如下 CREATE PROCEDURE SP1 AS BEGIN c
  • 如何在SQL Server数据库的所有表的所有列中搜索特定字符串?

    我们想要在拥有大约 120 个表的所有数据库中搜索一个字符串 即 Hello World 我们考虑过像 mysql dump 一样进行转储 但它以奇怪的 bak 格式出现 应在每个表的每一列中进行搜索 任何类型的脚本都可以做到这一点 或者这
  • 使用非管理员帐户时,SQL Linked Server 返回错误“不存在登录映射”

    我有一个本地 SQL Server 2008R2 我已将链接服务器配置为远程数据库 当我使用 SQL 登录帐户登录本地服务器时 链接服务器工作得很好sysadmin服务器角色 我可以查询远程服务器 因此我知道链接服务器设置是正确的 但是 如
  • 邮政编码 10 位数字字符使用的约束检查

    我有一张桌子 上面有Char 10 列类型 命名postal Code我需要对所有值进行约束检查 就像 10 位数字一样1234567890没有别的 我使用以下内容 CONSTRAINT CH PCDigit CHECK PostalCod

随机推荐

  • Outlook 中“已发送邮件”的事件

    我在用着ApplicationEvents 11 ItemSendEventHandler see http msdn microsoft com en us library microsoft office interop outlook
  • Qt/win:showMaximized() 在无框窗口上重叠任务栏

    我正在构建一个具有自己的自定义镶边的应用程序 我通过设置标志关闭了默认窗口边框 this gt setWindowFlags Qt FramelessWindowHint 设置此标志并关闭默认窗口边框后 任何对以下内容的调用 this gt
  • 当我传递带有前导零的字符串时,为什么 parseInt() 返回意外结果?

    parseInt 1 1 parseInt 01 1 parseInt 5 5 parseInt 05 5 parseInt 8 8 But why parseInt 08 0 parseInt 09 0 始终使用以基数作为第二个参数的重载
  • 如何设置x&y轴的对数刻度刻度?

    我想绘制一个没有科学记数法的对数刻度图 import matplotlib as mpl import matplotlib pyplot as plt plt plot np arange 0 10 0 1 plt xscale log
  • PDO fetchAll 将键值对分组到 assoc 数组中

    时不时地 当我遇到类似以下的查询时 我会遇到这样的情况 SELECT key value FROM settings 在这种情况下 我想获得一个关联数组 使用的值key value作为该数组的相应条目 例如如果数据库包含 first nam
  • 如何在renderscript和android框架之间交换数据?

    我是渲染脚本的新手 我正在尝试使用 renderscript 添加两个数组元素 我可以通过以下方式将值从 Android 传递给 renderscriptinvoke add方法 为了从 renderscript 返回 Android 框架
  • 如何在隐藏和查看密码之间切换

    有没有一种聪明的方法让用户在 android EditText 中在隐藏和查看密码之间切换 许多基于 PC 的应用程序允许用户执行此操作 自支持库 v24 2 0 以来 这确实很容易实现 你需要做的只是 将设计库添加到您的依赖项中 depe
  • IB Designables:无法渲染和更新 Google 地图的自动布局状态

    我在我的项目中使用 GoogleMaps Pod 我的故事板之一有错误 错误 IB Designables 无法渲染和更新 MapViewController 的自动布局状态 dlopen GoogleMaps framework 1 找不
  • SQL Server 查询 LEFT JOIN、SUM 和 GROUP BY,我被难住了!

    我正在绞尽脑汁地对付这个 我有 3 个 SQL Server 2005 表 用户奖 id awardamount userid dateawarded awardtypeid user id firstname lastname 奖项类型
  • 如何使用 Boost 创建关键部分?

    对于我的跨平台应用程序 我已经开始使用 Boost 但我无法理解如何实现代码来重现 Win32 临界区或 Net 的行为lock 我想写一个方法Foo可以从不同的线程调用来控制对共享字段的写入操作 应允许同一线程内的递归调用 Foo gt
  • C++:偏移到 std::vector 迭代器的正确转换是什么?

    我有一个函数需要std vector双精度数 并将它们复制到另一个向量 但以特定的偏移量 假设有足够的空间 void copy stuff const std vector
  • MarkerWithLabel 停止正常工作

    昨天 2014 年 3 月 4 日 我的 MarkerWithLabel Google 地图 API 应用程序 突然只显示最后一个标记 但标签全部显示 它一直工作得很好 谷歌示例位于 https google maps utility li
  • 通过 PublicKeyToken 防止外部程序集注入

    我正在使用以下代码 AppDomain CurrentDomain AssemblyLoad sender args gt var token args LoadedAssembly GetName GetPublicKeyToken if
  • 如何禁用一个类或整个包的记录器?

    我在用Apache Commons 日志记录 现在我想用SimpleLog实现 但是当我更改级别时 库中的记录器出现了 我希望它能把它们关掉 有没有一种简单的方法来更改整个包的日志级别 Log4j 可以做到这一点 我尝试过设置 org ap
  • Swift 运算符的优先级是什么?

    我想查找一些运算符的优先级 某处有所有这些的列表吗 我还没找到 更新为 Swift 3 0 斯威夫特3 0 现在有一个page在 Swift 文档中 下面列出了所有优先级组 也可以通过命令单击import Swift precedenceg
  • 本地通知的通知服务扩展

    系统将加载通知服务扩展并调用其didReceive withContentHandler iOS 10 中的本地通知 如果是的话我们该怎么做 否 接受的答案描述了通知Content扩展 允许您在展开的通知视图中呈现 ViewControll
  • 如何获取Android中支持的摄像机分辨率?

    我正在编写一个应用程序 允许用户使用手机摄像头捕捉视频 我使用自己的代码来录制视频 而不是 Android 内置的相机应用程序 一切工作正常 除了我需要能够访问支持的相机分辨率列表 以便我可以在运行时选择使用哪一个 我正在寻找类似的东西ge
  • 如何使用 ssh 使用 Nodegit 克隆 git 存储库

    我正在尝试使用库nodegit 版本0 2 4 和ssh从我们的teamforge服务器在node js中克隆git存储库 我们的服务器请求用户进行身份验证 当我尝试仅使用克隆方法而不传递选项时 我收到错误 回调无法初始化 SSH 凭据 我
  • ASP.Net WebAPI OWIN:为什么 Request.GetOwinContext() 返回 null?

    在我的生产代码中 我们遇到了 Request GetOwinContext 始终返回 null 的问题 我设置了一个小型测试 WebAPI 控制器来尝试隔离问题 public class TestController ApiControll
  • 如何正确使用 SET XACT_ABORT ON

    我们最近被空降到一个新的 ETL 项目 该项目的代码非常糟糕 我手中有一个包含 700 行和各种更新的查询 我想用它来调试它SET XACT ABORT ON 目标是如果只有一个事务失败则回滚所有事务 但我找到了几种将其存档在 StackO