SAVE TRANSACTION SAVE TRANSACTION - 北京怡康軟件科技有限公司 資源網(wǎng) "/>
在事務內(nèi)設置保存點。
SAVE TRAN [ SACTION ] { savepoint_name | @savepoint_variable
}
savepoint_name
是指派給保存點的名稱。保存點名稱必須符合標識符規(guī)則,但只使用前 32 個字符。
@savepoint_variable
是用戶定義的、含有有效保存點名稱的變量的名稱。必須用 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明該變量。
用戶可以在事務內(nèi)設置保存點或標記。保存點定義如果有條件地取消事務的一部分,事務可以返回的位置。如果將事務回滾到保存點,則必須(如果需要,使用更多的 Transact-SQL 語句和 COMMIT TRANSACTION 語句)繼續(xù)完成事務,或者必須(通過將事務回滾到其起始點)完全取消事務。若要取消整個事務,請使用 ROLLBACK TRANSACTION transaction_name 格式。這將撤消事務的所有語句和過程。
在由 BEGIN DISTRIBUTED TRANSACTION 顯式啟動或從本地事務升級而來的分布式事務中,不支持 SAVE TRANSACTION。
重要 當事務開始時,將一直控制事務中所使用的資源直到事務完成(也就是鎖定)。當將事務的一部分回滾到保存點時,將繼續(xù)控制資源直到事務完成(或者回滾全部事務)。
默認情況下,將 SAVE TRANSACTION 權限授予任何有效用戶。
下例更改分給 The Gourmet Microwave 的兩位作者的版稅。數(shù)據(jù)庫將會在兩個更新間不一致,因此必須將它們分組為用戶定義的事務。
相關文章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. */