SAVE TRANSACTION SAVE TRANSACTION - 北京怡康軟件科技有限公司 資源網(wǎng) "/>
在事務(wù)內(nèi)設(shè)置保存點(diǎn)。
SAVE TRAN [ SACTION ] { savepoint_name | @savepoint_variable
}
savepoint_name
是指派給保存點(diǎn)的名稱。保存點(diǎn)名稱必須符合標(biāo)識(shí)符規(guī)則,但只使用前 32 個(gè)字符。
@savepoint_variable
是用戶定義的、含有有效保存點(diǎn)名稱的變量的名稱。必須用 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明該變量。
用戶可以在事務(wù)內(nèi)設(shè)置保存點(diǎn)或標(biāo)記。保存點(diǎn)定義如果有條件地取消事務(wù)的一部分,事務(wù)可以返回的位置。如果將事務(wù)回滾到保存點(diǎn),則必須(如果需要,使用更多的 Transact-SQL 語(yǔ)句和 COMMIT TRANSACTION 語(yǔ)句)繼續(xù)完成事務(wù),或者必須(通過將事務(wù)回滾到其起始點(diǎn))完全取消事務(wù)。若要取消整個(gè)事務(wù),請(qǐng)使用 ROLLBACK TRANSACTION transaction_name 格式。這將撤消事務(wù)的所有語(yǔ)句和過程。
在由 BEGIN DISTRIBUTED TRANSACTION 顯式啟動(dòng)或從本地事務(wù)升級(jí)而來(lái)的分布式事務(wù)中,不支持 SAVE TRANSACTION。
重要 當(dāng)事務(wù)開始時(shí),將一直控制事務(wù)中所使用的資源直到事務(wù)完成(也就是鎖定)。當(dāng)將事務(wù)的一部分回滾到保存點(diǎn)時(shí),將繼續(xù)控制資源直到事務(wù)完成(或者回滾全部事務(wù))。
默認(rèn)情況下,將 SAVE TRANSACTION 權(quán)限授予任何有效用戶。
下例更改分給 The Gourmet Microwave 的兩位作者的版稅。數(shù)據(jù)庫(kù)將會(huì)在兩個(gè)更新間不一致,因此必須將它們分組為用戶定義的事務(wù)。
相關(guān)文章BEGIN TRANSACTION royaltychange
UPDATE titleauthor
SET royaltyper = 65
FROM titleauthor, titles
WHERE royaltyper = 75
AND titleauthor.title_id = titles.title_id
AND title = 'The Gourmet Microwave'UPDATE titleauthor
SET royaltyper = 35
FROM titleauthor, titles
WHERE royaltyper = 25
AND titleauthor.title_id = titles.title_id
AND title = 'The Gourmet Microwave'
SAVE TRANSACTION percentchanged
/*
After having updated the royaltyper entries for the two authors, the
user inserts the savepoint percentchanged, and then determines how a
10-percent increase in the book's price would affect the authors' royalty earnings.
*/UPDATE titles
SET price = price * 1.1
WHERE title = 'The Gourmet Microwave'
SELECT (price * royalty * ytd_sales) * royaltyper
FROM titles, titleauthor
WHERE title = 'The Gourmet Microwave'
AND titles.title_id = titleauthor.title_id
/*
The transaction is rolled back to the savepoint
with the ROLLBACK TRANSACTION statement.*/
ROLLBACK TRANSACTION percentchanged
COMMIT TRANSACTION
/* End of royaltychange. */