我在事务中运行以下SQL更新查询,以便在提交之前检查结果。但是,在执行和回滚之后,我发现它已经提交并且我的数据已经改变,尽管从未发布提交语句。SQL事务自我承诺
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
我的声明是正确的格式,我没有丢失任何重要的数据,但我想知道为什么会这样,这样我就不会遇到在未来的问题。
我已经完成了其他可以回滚的事务。为什么有些人会工作而不是其他人? – NonSecwitter 2014-09-30 18:00:03
从您的第一个链接看来,我的'BEGIN'应该覆盖自动提交。 SQL Server连接以自动提交模式运行,直到BEGIN TRANSACTION语句启动显式事务或设置隐式事务模式为止。 ' – NonSecwitter 2014-09-30 18:02:07
哦,等等......我知道我做了什么。我没有在SQL Query的末尾放置'ROLLBACK TRAN Test',而是用'ROLLBACK'替换了'BEGIN',所以它有效地回滚了我以前的事务,就好像我已经附加了命令一样,然后继续执行整个查询在“ROLLBACK”行之后。 – NonSecwitter 2014-09-30 18:04:22