没有事务的情况下执行 SQL Server COMMIT?

7
根据MSDN的说法:提交语法是:
```sql COMMIT [ TRANSACTION | WORK ] ```
然而,当我省略“tran”/“transaction”这些词时,它编译并运行时没有任何错误。为什么会这样?
它是否执行了其他操作?
2个回答

11

所讨论的COMMIT实际上不是你想象中的COMMIT。请参考COMMIT WORK

COMMIT [ WORK ] [ ; ]

备注

此语句与COMMIT TRANSACTION的功能相同,不同之处在于COMMIT TRANSACTION接受用户定义的事务名称。带有或不带有可选关键字WORK的此COMMIT语法与SQL-92兼容。

因此,单独使用COMMIT等同于COMMIT WORK,它与COMMIT TRANSACTION相同。
ROLLBACK [ WORK ]也是如此。

注:

BEGIN TRANSACTION gbn
SELECT 1
COMMIT gbn -- fail
GO
BEGIN TRANSACTION gbn
SELECT 2
COMMIT TRAN gbn -- works
GO

除了COMMIT TRANSACTION可以接受用户定义的事务名称之外......但我没有给他事务的名称......这就是问题所在。+我不是在谈论“WORK”关键字,而是在谈论commit与commit trans的区别。 - Royi Namir
@Royi Namir:不,COMMIT本身意味着COMMIT WORK。与命名事务无关:如果您确实对其进行了命名,则在问题中没有提到。而且使用名称,您必须明确使用COMMIT TRANSACTION SomeNameCOMMIT TRAN SomeName不是仅使用COMMIT。 - gbn
那么如果我不使用任何命名事务,我总是可以单独使用Commit。对吗? - Royi Namir

0

IF @@TRANCOUNT > 0 的目的是检查是否存在(至少)一个未决事务 - 如果要与ROLLBACKCOMMIT一起使用,因为在没有任何事务打开的情况下执行这些指令将生成错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接