SQL事务自提交

SQL事务自提交,sql,tsql,transactions,commit,Sql,Tsql,Transactions,Commit,我正在事务中运行以下SQL更新查询,以便在提交之前检查结果。然而,在执行并回滚之后,我发现它已经提交了,并且我的数据已经更改,尽管从未发出commit语句 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 =

我正在事务中运行以下SQL更新查询,以便在提交之前检查结果。然而,在执行并回滚之后,我发现它已经提交了,并且我的数据已经更改,尽管从未发出commit语句

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

我的语句格式正确,没有丢失任何重要数据,但我想知道为什么会发生这种情况,以便将来不会遇到问题。

SQL Server角色退出,自动提交模式默认设置为true

是如何关闭它的,下面是有关此功能的一些附加细节:


事实证明,当我试图回滚我的原始事务时,SQL正按照我告诉它的方式执行。我将
BEGIN TRAN Test
修改为
ROLLBACK TRAN Test
,而不是将
ROLLBACK
附加到事务的末尾,如下所示:

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
,然后在该查询的末尾追加了一个额外的查询。

我还完成了其他可以回滚的事务。为什么有些能工作而其他不能?从您的第一个链接来看,我的
开始
应该覆盖自动提交<代码>SQL Server连接在自动提交模式下运行,直到BEGIN TRANSACTION语句启动显式事务,或隐式事务模式设置为on哦,等等。。。我知道我做了什么。我没有将
ROLLBACK TRAN Test
放在我的SQL查询的末尾,而是将
BEGIN
替换为
ROLLBACK
,因此它有效地回滚了我以前的事务,就好像我附加了命令一样,然后在
ROLLBACK
行之后继续执行整个查询。