SQL事务自提交

时间:2014-09-30 16:53:06

标签: sql tsql transactions commit

我在事务中运行以下SQL Update查询,以便在提交之前检查结果。但是,在执行和回滚后,我发现它已经提交,并且我的数据已经改变,尽管从未发出过提交语句。

USE WS_Live
BEGIN TRAN Test

UPDATE AF
SET AF.AdditionalFieldsLookup11 = NULL

OUTPUT inserted.*

FROM dbo.Incident AS I

INNER JOIN dbo.AdditionalFields AS AF
ON AF.Oid = I.AdditionalFields

INNER JOIN dbo.AdditionalFieldsLookup11 AS AFL11
ON AFL11.Oid = AF.AdditionalFieldsLookup11

WHERE AF.AdditionalFieldsLookup11 IS NOT NULL

我的陈述格式正确,我没有丢失任何重要数据,但我想知道为什么会这样,以便我将来不会遇到问题。

2 个答案:

答案 0 :(得分:2)

默认情况下,自动提交模式的SQL Server角色设置为true。

Here是关闭它的方法,这里有一个关于此功能的更多细节:

答案 1 :(得分:0)

事实证明,当我尝试回滚原始事务时,SQL正在完成我告诉它的操作。我没有将ROLLBACK附加到我的交易结束,而是将BEGIN TRAN Test修改为ROLLBACK TRAN Test,如下所示:

USE WS_Live
ROLLBACK TRAN Test

UPDATE AF
SET AF.AdditionalFieldsLookup11 = NULL

OUTPUT inserted.*

FROM dbo.Incident AS I

INNER JOIN dbo.AdditionalFields AS AF
ON AF.Oid = I.AdditionalFields

INNER JOIN dbo.AdditionalFieldsLookup11 AS AFL11
ON AFL11.Oid = AF.AdditionalFieldsLookup11

WHERE AF.AdditionalFieldsLookup11 IS NOT NULL

SQL的行为就好像我在前一个查询的末尾附加了ROLLBACK TRAN Test,然后在其末尾添加了一个额外的查询。