在一个事务中封装单个合并语句(包含插入、删除和更新),这是必要的吗?

15

我目前无法测试并自行得出解决方案,也没有在MSDN或Google上找到相关信息。

有人问我,在给定表中插入、删除和更新记录的合并语句是否需要封装在事务中(例如,在执行插入后进行更新时发生故障),或者如果任何操作失败,整个合并是否也会失败。

也许加入事务不会有害,但出于好奇,我们希望了解更多关于合并内部的信息。

4个回答

24

SQL Server中的任何语句本身就是一个事务。

也就是说,它是原子性的:要么全部成功,要么全部失败。

显式事务用于将多个单独的原子语句组合成一个大的原子事务。

这就是MERGE的美妙之处:无需显式事务和3个单独的语句。


2

如果没有启动显式事务,则 SQL Server 中的所有 DML 语句都将在隐式事务中运行。当然,您仍然可以将其包装在自己的显式事务中,但不应该需要。


1
每个查询都始终在事务中运行。如果您不创建事务,则查询本身具有其自己的事务。如果出现任何问题,整个查询将被回滚。
如果您想进行更多的错误处理,可能需要在其周围放置一个事务,但这对于数据库的一致性并非必要。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接