围绕多个插入或更新使用事务的正确方法

2023-11-24

测试插入/更新失败并回滚此事务(如果有)的正确方法是什么?我认为我所拥有的不起作用,因为我的插入/更新是 3 个单独的语句,并且 @@ROWCOUNT 将仅反映最后执行的语句。

BEGIN TRANSACTION Script;
GO

INSERT INTO TableA (id) VALUES (1)
INSERT INTO TableB (id) VALUES (1)
UPDATE TableC SET id=1 WHERE id=2
GO

IF (@@ROWCOUNT=3 AND @@ERROR=0)
    BEGIN
    COMMIT
    END
ELSE
    BEGIN
    PRINT 'Error: Rolling back transaction'
    ROLLBACK TRANSACTION Script
    END
GO

如果您在开始事务之前将 SET XACT_ABORT ON,如果出现错误,将自动发出回滚.

SET XACT_ABORT ON

begin transaction

INSERT INTO TableA (id) VALUES (1)
INSERT INTO TableB (id) VALUES (1)
UPDATE TableC SET id=1 WHERE id=2

commit transaction

如果你想自己回滚,使用 try .. catch 块.

begin transaction

begin try

  INSERT INTO TableA (id) VALUES (1)
  INSERT INTO TableB (id) VALUES (1)
  UPDATE TableC SET id=1 WHERE id=2

  commit transaction

end try

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

围绕多个插入或更新使用事务的正确方法 的相关文章

  • Java Connection.close 是否回滚?

    Java Connection close 是否回滚到finally 块 我知道 Net SqlConnection close 可以做到这一点 有了这个 我可以在没有 catch 的情况下创建 try finally 块 Example
  • 如何循环遍历sql中的json数组以选择特定索引处的值

    我有一个存储过程 用于查询数据库并将结果存储在 Json 变量中 现在我想按索引循环遍历 Json 数组以获取特定值 有人可以告诉我如何实现这一目标吗 以下是我的查询 DECLARE json NVARCHAR Max DECLARE na
  • 重置 JDBC Kafka 连接器以从头开始提取行?

    Kafka 连接器可以利用主键和时间戳来确定需要处理哪些行 我正在寻找一种重置连接器的方法 以便它从一开始就进行处理 因为要求是在分布式模式下运行 所以最简单的做法是将连接器名称更新为新值 这将提示在 connect offsets 主题中
  • 分解 SQL 表中每一行的 XML

    我有一个表 其中包含两列 ID 和 XML 数据 我想分解每个 ID 的 XML 我在 XML 中提取单个值 并且所有 XML 的结构都相同 我只是不确定如何循环遍历表并将 XML 查询应用于每一行 我需要应用的查询如下 Select to
  • 如何根据条件选择列?

    我有一个名为 status 的变量 我在此 select 语句之前设置了它 Select ordr num as num ordr date as date ordr ship with as shipwith From order whe
  • 存储过程中的分组和循环

    我需要对 MTH1 MTH2 等列进行求和 但对于我传递的参数 它将为同一帐户代码生成六行信息 这是正确的 它应该产生什么我的问题是如何只返回其中一个数据 但是到目前为止 这就是我的存储过程中六行的总和 ALTER PROCEDURE db
  • Sql Server 复制需要实际的服务器名称才能连接到服务器

    当我想要创建新的发布或订阅时 我收到以下消息 Sql Server 复制需要实际的服务器名称才能连接到服务器 不支持通过服务器别名 IP 地址或任何其他备用名称进行连接 指定实际的服务器名称 有谁知道我应该做什么 我在以下链接中找到了解决方
  • 未对@Transactional Annotation执行回滚[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个用于转账的 API 即取款和存款 我使用 Transactional Annotation 执行事务 但有一些标准 即如果银行帐号不存在 则应通过运行时异常 我将附上其中的代码 现在 当调用 T
  • 使用 HTTP 访问数据库对象

    是否可以使用 HTTP 访问数据库对象SQL Server 2012它的完成方式是使用SQL Server 2000 我提到了下面的文章 但它是关于SQL Server 2000 使用 HTTP 访问数据库对象 http technet m
  • SQL Compact 3.5附加多个数据库/跨数据库查询?

    是否可以将多个数据库附加到 SQL CE 3 5 精简版 例如MasterData sdf Orders sdf 并对它们应用查询 例如 选择 Orders iOrderID Orders cItemID MasterData cItemD
  • 从sql server 2005中的列中获取查询的xml节点

    我有一个包含 2 列的表 第一个是带有主键的整数列 第二个是带有数据的 xml 列 数据列包含xml如下
  • 如何将 ROW_NUMBER() 分配给列?

    看完之后这个问题 https stackoverflow com questions 1293390 sql to output line number in results of a query 我还有一个类似的问题 有没有一种简单的方法
  • 使用finally代替catch

    我已经多次看到这种模式了 bool success false try DoSomething success true finally if success Rollback 我一直想知道 为什么这比使用 catch 进行回滚更好 try
  • 如何从代码获取复制状态

    我已经在 SQL Server 2005 数据库上完成了复制 现在我想从我的 GUI 显示状态 可以是 C 或其他 是否有任何方法或 API 可以让我监控复制状态 这是为了客户端确认复制正在工作 Thanks 像这样的事情 http www
  • 尽管有 TryCatch 活动,异常仍会从工作流中逃脱

    我在 Windows 服务中有一个工作流程 它是一个定期执行工作的循环 这项工作是在一个TryCatch http msdn microsoft com en us library system activities statements
  • 有没有办法让 saveAll() 删除无关的对象?

    我的主机对象有许多与其关联的选项对象 在编辑表单中 用户可以选择 取消 选择选项并保存新的关联集 这是通过对发布的数据使用 saveAll 来实现的 结果是 主机 主 对象已更新 更新先前关联和新关联中包含的选项 关联 对象 并且 将创建未
  • C# System.Transactions 与 TransactionScope

    基于这篇文章here https learn microsoft com en us previous versions ms172152 v vs 90 redirectedfrom MSDN以及问题 事务和 TransactionSco
  • SQL:从单个查询列出多对多

    我有 3 个表 分别代表 Users Roles 和多对多 UsersInRoles 键为 UserId RoleId 相关列 用户名 角色名 在管理 html 应用程序中 我想显示所有用户及其所在角色的列表 我尝试从 SQL 构建一个将返
  • 我应该在删除数据之前禁用聚集索引吗?

    我知道这已经像任何事情一样被讨论过 但找不到我可以接受的可靠答案 假设我有一个有100亿条记录的表 需要删除where子句中带有标识列的记录 我应该选择哪个选项 选项1 禁用索引 这将节省删除后重新排列索引的开销 但会花费更长的时间来搜索需
  • Redis 与 SQL Server 性能对比

    应用程序性能是使用缓存而不是关系数据库的主要原因之一 因为它以键值对的形式将数据存储在内存中 所以我们可以将经常访问的不经常更改的数据存储在缓存中 从缓存中读取比从数据库中读取要快得多 Redis 是分布式缓存市场上最好的解决方案之一 我正

随机推荐

  • 如何更改默认分支以推送到 Mercurial 中?

    我喜欢在 Mercurial 中创建命名分支来处理可能需要一段时间编码的功能 所以当我推送时我会执行hg push r default确保我只将更改推送到默认分支 然而 必须记住的是一种痛苦 r default每次我执行推送或传出命令时 所
  • @Temporal(TemporalType.DATE) 与 Oracle 12

    在我们的数据库中 我们有多个带有日期字段的实体 Oracle 将每个日期视为相同的 包含日期和时间部分 然而 JPA 实体通过注释 Temporal 进行区分 当我们想省略时间部分时 我们用 Temporal TemporalType DA
  • 在alertDialog中验证EditText

    我正在尝试添加空字段验证EditText on AlertDialog 但即使字段为空后 也不会显示错误消息 而是AlertDialog正在关闭 但是 如果条件运行良好 因为如果任何字段为空 我将无法进行后期操作 这是我的 Java 示例代
  • 如何使用返回的 linq 变量?

    我决定快速了解一下 LINQ 方面的内容 而不是仅仅使用直接的 foreach 循环 但我在让它工作时遇到了一些麻烦 主要是由于我认为的数据类型 到目前为止 我已经得到了这个 var selectedSiteType from sites
  • 页面的官方 Facebook RSS 提要

    许多人已经描述了如何获取 Facebook 页面的 RSS 数据源 例如 http ahrengot com tutorials facebook rss feed 以下 URL 提供了可口可乐页面的 feed 但是 我似乎无法在 face
  • 在 Web 应用程序之间共享 ASP.NET 资源文件

    我有多个项目需要共享资源文件 resx 已提出将资源文件移动到单独的程序集并让 Web 项目引用它的建议 有如何执行此操作的示例吗 我是否创建一个新的类库项目并将 App GlobalResource 文件夹移到其中 我认为这不会起作用 因
  • 如何使用自然的entrySet()顺序迭代HashMap?

    我的地图包含按字母顺序排序的键 当我显示它时 我使用的是entrySet iterator 但我的结果不是按字母顺序排列的 我如何才能按顺序获得结果 不 您的地图不按字母顺序保存元素 你可能有 put 然后按该顺序 但映射没有定义的迭代顺序
  • 您的 Android App Bundle 使用错误的密钥进行签名。确保您的应用程序包使用正确的签名密钥进行签名,然后重试

    如何使用正确的签名密钥对我的 Android 应用程序包进行签名 我为这个问题把头撞在桌子上大约两个小时 当我最终放弃并填写 重置密钥 请求时 我意识到我当前正在尝试将其上传到错误的项目一直以来 因此 第一步 确认您正在尝试上传到正确的项目
  • 流式 HTTP 响应,刷新到浏览器

    我有如下的观点 from django views decorators http import condition def stream for i in range 0 40 yield 1024 yield d i time slee
  • 贫血领域模型:优点/缺点

    我想知道使用贫血域模型的优点和缺点 请参阅下面的链接 福勒文章 由于 贫血领域模型 是反模式 为什么有这么多系统实现它 我认为有几个原因 1 系统的复杂性 在一个简单的系统中 几乎是您在互联网上找到的所有示例和示例代码 如果我想实现 将产品
  • 如何在单击某些按钮时重新加载我的 UIViewController?

    我正在开发一个 iPhone 应用程序 我有一个UIViewController类中存在一些封面流动画 根据设计 我的视图顶部有一些 5 个按钮 每个按钮都有一个IBAction单击按钮的方法我需要显示具有不同数据的不同组的封面流 并且封面
  • 在 Perl 正则表达式中嵌入评估

    所以我正在编写一个快速的 Perl 脚本 它清理一些 HTML 代码并通过 html gt pdf 程序运行它 我希望丢失尽可能少的信息 因此我想扩展文本区域以适应其中当前的所有文本 在我的例子中 这意味着根据文本框中字符串的值将行数设置为
  • C# 线程安全的StreamWriter 怎么做呢? 2

    所以这是我上一个问题的延续 所以问题是 构建线程安全的程序的最佳方法是什么 因为它需要将双精度值写入文件 如果通过流写入器保存值的函数被多个线程调用 最好的方法是什么 我修改了MSDN上找到的一些代码 下面怎么样 这个正确地将所有内容写入文
  • Django - 限制表单中选择字段的选择

    我在 Django 中的选择字段上遇到问题 我需要一个表格来将订单移动添加到工单中 这些是choices py中的选择 STATUS CHOICES 1 Orden Creada 2 En Tienda Asociada 3 Recibid
  • 如何将序列号列添加到结果数据中? [复制]

    这个问题在这里已经有答案了 可能的重复 向此 T SQL 查询添加行号 我使用的是 sql server 2008 当我输入 从员工中选择 结果是这样的 EmpID EmpName Salary DB1608 David 100000 JT
  • JavaScript .prototype 如何工作?

    我不太热衷于动态编程语言 但我已经编写了相当多的 JavaScript 代码 我从来没有真正了解过这种基于原型的编程 有人知道这是如何工作的吗 var obj new Object obj prototype test function a
  • SQL LIKE 语句的 LINQ 版本

    我是 LINQ 的新手 在网上搜索模仿 SQL 的 LIKE 语句的 LINQ 示例并不能让我满意 我想要的是产生与此 SQL 相同的查询结果 SELECT FROM table 1 WHERE column 1 LIKE 0 我想从 ta
  • Neo4j:MERGE 创建重复节点

    我的数据库模型有用户和 MAC 地址 一个用户可以有多个MAC地址 但一个MAC只能属于一个用户 如果某个用户设置了他的 MAC 并且该 MAC 已经链接到另一个用户 则现有关系将被删除 并在新所有者和该 MAC 之间创建新关系 换句话说
  • 在 Swing 应用程序中使用 Hibernate 进行会话管理

    如何在 Java Desktop Swing 应用程序中进行 Hibernate 会话管理 您使用单个会话吗 多次会议 以下是有关该主题的一些参考资料 http www hibernate org 333 html http blog sc
  • 围绕多个插入或更新使用事务的正确方法

    测试插入 更新失败并回滚此事务 如果有 的正确方法是什么 我认为我所拥有的不起作用 因为我的插入 更新是 3 个单独的语句 并且 ROWCOUNT 将仅反映最后执行的语句 BEGIN TRANSACTION Script GO INSERT