將顯式事務(wù)或隱性事務(wù)回滾到事務(wù)的起點(diǎn)或事務(wù)內(nèi)的某個(gè)保存點(diǎn)。
ROLLBACK [ TRAN [ SACTION ]
[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ] ]
transaction_name
是給 BEGIN TRANSACTION 上的事務(wù)指派的名稱。transaction_name 必須符合標(biāo)識(shí)符規(guī)則,但只使用事務(wù)名稱的前 32 個(gè)字符。嵌套事務(wù)時(shí),transaction_name 必須是來自最遠(yuǎn)的 BEGIN TRANSACTION 語句的名稱。
@tran_name_variable
是用戶定義的、含有有效事務(wù)名稱的變量的名稱。必須用 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明該變量。
savepoint_name
是來自 SAVE TRANSACTION 語句的 savepoint_name。savepoint_name 必須符合標(biāo)識(shí)符規(guī)則。當(dāng)條件回滾只影響事務(wù)的一部分時(shí)使用 savepoint_name。
@savepoint_variable
是用戶定義的、含有有效保存點(diǎn)名稱的變量的名稱。必須用 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明該變量。
ROLLBACK TRANSACTION 清除自事務(wù)的起點(diǎn)或到某個(gè)保存點(diǎn)所做的所有數(shù)據(jù)修改。ROLLBACK 還釋放由事務(wù)控制的資源。
不帶 savepoint_name 和 transaction_name 的 ROLLBACK TRANSACTION 回滾到事務(wù)的起點(diǎn)。嵌套事務(wù)時(shí),該語句將所有內(nèi)層事務(wù)回滾到最遠(yuǎn)的 BEGIN TRANSACTION 語句。在這兩種情況下,ROLLBACK TRANSACTION 均將 @@TRANCOUNT 系統(tǒng)函數(shù)減為 0。ROLLBACK TRANSACTION savepoint_name 不減少 @@TRANCOUNT。
ROLLBACK TRANSACTION 語句若指定 savepoint_name 則不釋放任何鎖。
在由 BEGIN DISTRIBUTED TRANSACTION 顯式啟動(dòng)或從本地事務(wù)升級(jí)而來的分布式事務(wù)中,ROLLBACK TRANSACTION 不能引用 savepoint_name。
在執(zhí)行 COMMIT TRANSACTION 語句后不能回滾事務(wù)。
在事務(wù)內(nèi)允許有重復(fù)的保存點(diǎn)名稱,但 ROLLBACK TRANSACTION 若使用重復(fù)的保存點(diǎn)名稱,則只回滾到最近的使用該保存點(diǎn)名稱的 SAVE TRANSACTION。
在存儲(chǔ)過程中,不帶 savepoint_name 和 transaction_name 的 ROLLBACK TRANSACTION 語句將所有語句回滾到最遠(yuǎn)的 BEGIN TRANSACTION。在存儲(chǔ)過程中,ROLLBACK TRANSACTION 語句使 @@TRANCOUNT 在觸發(fā)器完成時(shí)的值不同于調(diào)用該存儲(chǔ)過程時(shí)的 @@TRANCOUNT 值,并且生成一個(gè)信息。該信息不影響后面的處理。
如果在觸發(fā)器中發(fā)出 ROLLBACK TRANSACTION:
每次進(jìn)入觸發(fā)器,@@TRANCOUNT 就增加 1,即使在自動(dòng)提交模式下也是如此。(系統(tǒng)將觸發(fā)器視作隱性嵌套事務(wù)。)
在存儲(chǔ)過程中,ROLLBACK TRANSACTION 語句不影響調(diào)用該過程的批處理中的后續(xù)語句;將執(zhí)行批處理中的后續(xù)語句。在觸發(fā)器中,ROLLBACK TRANSACTION 語句終止含有激發(fā)觸發(fā)器的語句的批處理;不執(zhí)行批處理中的后續(xù)語句。
ROLLBACK TRANSACTION 語句不生成顯示給用戶的信息。如果在存儲(chǔ)過程或觸發(fā)器中需要警告,請(qǐng)使用 RAISERROR 或 PRINT 語句。RAISERROR 是用于指出錯(cuò)誤的首選語句。
ROLLBACK 對(duì)游標(biāo)的影響由下面三個(gè)規(guī)則定義:
ROLLBACK TRANSACTION 權(quán)限默認(rèn)授予任何有效用戶。
相關(guān)文章