【发布时间】:2019-09-17 01:09:00
【问题描述】:
在 SQL Server 中的 SQL 脚本中
如果我有一块 Begin ... End
BEGIN
UPDATE Table1
SET Column1 = 1
UPDATE Table2
SET Column2 = 2
UPDATE Table3
SET Column3 = 3
END
在这种情况下,这是否意味着所有 3 个更新语句应该一起传递?
我的意思是如果第一次和第二次更新成功但第三次失败,这是否意味着所有 3 次更新都会回滚?或仅更新表 1 和表 2,不更新表 3
换句话说
上面的脚本是否等价于
UPDATE Table1
SET Column1 = 1
UPDATE Table2
SET Column2 = 2
UPDATE Table3
SET Column3 = 3
或者等价于
BEGIN TRANSACTION;
UPDATE Table1
SET Column1 = 1
UPDATE Table2
SET Column2 = 2
UPDATE Table3
SET Column3 = 3
COMMIT;
【问题讨论】:
-
总结一下:) no begin/end 根本不等价。
-
@DaleBurrell 你的意思是它不是一个事务,所以如果第一次更新成功并且第三次失败它仍然会更新第一次而不回滚
-
添加
begin/end对内部T-SQL的“原子性”完全没有影响。由于答案状态开始/结束是为了控制流量,例如允许一个 if 语句包含多个表达式来执行。