2012-02-13 62 views

回答

7

有问题的COMMIT实际上并不是您认为的COMMIT。见COMMIT WORK

COMMIT [WORK] [; ]

备注

该语句的功能与COMMIT TRANSACTION,除了COMMIT TRANSACTION接受用户定义的事务的名称。此COMMIT语法(带或不带可选关键字WORK)与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 
+0

'除了COMMIT TRANSACTION接受用户定义的交易名称....但我没有给他交易的名字......多数民众赞成的问题。 +我不是在谈论'WORK'关键字。即时通讯谈论提交与提交trans。 – 2012-02-13 13:41:34

+0

@罗伊纳米尔:不,承诺本身意味着提交工作。与指定交易无关:如果您确实命名了它,则在您的问题中没有提及。和一个名字,你必须显式使用'COMMIT TRANSACTION SomeName'或'COMMIT TRAN SomeName'。 *不*自行落实 – gbn 2012-02-13 13:44:11

+0

所以如果我不使用任何命名事务,我总是可以单独使用提交。对 ? – 2012-02-13 13:47:42

0

IF @@TRANCOUNT > 0目标检查有(至少)一个未决事务 - 如果必须同时ROLLBACKCOMMIT作为执行这些指令,而无需任何事务打开使用会产生一个错误