2012-02-13 90 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作爲執行這些指令,而無需任何事務打開使用會產生一個錯誤