根据MSDN的说法:提交语法是:
```sql COMMIT [ TRANSACTION | WORK ] ```
然而,当我省略“tran”/“transaction”这些词时,它编译并运行时没有任何错误。为什么会这样?
它是否执行了其他操作?
```sql COMMIT [ TRANSACTION | WORK ] ```
然而,当我省略“tran”/“transaction”这些词时,它编译并运行时没有任何错误。为什么会这样?
它是否执行了其他操作?
所讨论的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
IF @@TRANCOUNT > 0
的目的是检查是否存在(至少)一个未决事务 - 如果要与ROLLBACK
和COMMIT
一起使用,因为在没有任何事务打开的情况下执行这些指令将生成错误。
COMMIT TRANSACTION SomeName
或COMMIT TRAN SomeName
。不是仅使用COMMIT。 - gbn