【问题标题】:Do Begin & End in SQL Server work as TransactionSQL Server 中的 Begin & End 是否作为事务工作
【发布时间】: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 语句包含多个表达式来执行。

标签: sql-server transactions


【解决方案1】:

BEGIN 和 END 定义了一个语句块,用于控制流程。 BEGIN TRANSACTION / COMMIT TRANSACTION / ROLLBACK TRANSACTION 用于数据库事务。如果数据库在事务开始之前处于一致状态,那么数据库将在事务完成后处于一致状态。如果在提交事务之前发生故障,那么对数据库所做的所有更改都将回滚到事务开始时的点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 2021-04-16
    • 2012-12-04
    • 2020-10-14
    相关资源
    最近更新 更多