指定一個由 Microsoft 分布式事務(wù)處理協(xié)調(diào)器 (MS DTC) 管理的 Transact-SQL 分布式事務(wù)的起始。
BEGIN DISTRIBUTED TRAN [ SACTION ]
[ transaction_name | @tran_name_variable ]
transaction_name
是用戶定義的事務(wù)名,用于跟蹤 MS DTC 實用工具中的分布式事務(wù)。transaction_name 必須符合標(biāo)識符規(guī)則,但是僅使用頭 32 個字符。
@tran_name_variable
是用戶定義的一個變量名,它含有一個事務(wù)名,該事務(wù)名用于跟蹤 MS DTC 實用工具中的分布式事務(wù)。必須用 char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型聲明該變量。
執(zhí)行 BEGIN DISTRIBUTED TRANSACTION 語句的服務(wù)器是事務(wù)創(chuàng)建人,并且控制事務(wù)的完成。當(dāng)連接發(fā)出后續(xù) COMMIT TRANSACTION 或 ROLLBACK TRANSACTION 語句時,主控服務(wù)器請求 MS DTC 在所涉及的服務(wù)器間管理分布式事務(wù)的完成。
有兩個方法可將遠(yuǎn)程 SQL 服務(wù)器登記在一個分布式事務(wù)中:
例如,如果在 ServerA 上發(fā)出 BEGIN DISTRIBUTED TRANSACTION,該連接調(diào)用 ServerB 上的存儲過程和 ServerC 上的另一個存儲過程,并且 ServerC 上的存儲過程對 ServerD 執(zhí)行一個分布式查詢,那么四個 SQL 服務(wù)器都進(jìn)入分布式事務(wù)中了。ServerA 是該事務(wù)的創(chuàng)建者和控制服務(wù)器。
分布式事務(wù) Transact-SQL 涉及的連接并不獲取可以傳給另一個連接的事務(wù)對象,從而也不能用該方法顯式登記在分布式事務(wù)中。遠(yuǎn)程服務(wù)器登記到事務(wù)中的唯一方法是成為遠(yuǎn)程存儲過程調(diào)用或分布式查詢的目標(biāo)。
sp_configure remote proc trans 選項控制對本地事務(wù)中的遠(yuǎn)程存儲過程調(diào)用是否自動使本地事務(wù)被提升為由 MS DTC 管理的分布式事務(wù)。連接層 SET 選項 REMOTE_PROC_TRANSACTIONS 可用于替代由 sp_configure remote proc trans 建立的服務(wù)器默認(rèn)值。啟用本選項后,遠(yuǎn)程存儲過程調(diào)用會使一個本地事務(wù)提升為分布式事務(wù)。創(chuàng)建 MS DTC 事務(wù)的連接成為該事務(wù)的創(chuàng)建人。COMMIT TRANSACTION 初始化一個 MS DTC 協(xié)調(diào)的提交。如果啟用了 sp_configure remote proc trans 選項,本地事務(wù)中的遠(yuǎn)程存儲過程調(diào)用將被自動保護(hù),成為分布式事務(wù)的一部分,而不需要重寫應(yīng)用程序以便專門使用 BEGIN DISTRIBUTED TRANSACTION 以替代 BEGIN TRANSACTION。
在本地事務(wù)中執(zhí)行一個分布式查詢時,如果目標(biāo) OLE DB 數(shù)據(jù)源支持 ItransactionLocal,則該事務(wù)被自動提升為分布式事務(wù)。如果目標(biāo) OLE DB 數(shù)據(jù)源不支持 ItransactionLocal,則在分布式查詢中只允許只讀操作。
關(guān)于分布式事務(wù)環(huán)境和處理的更多信息,請參見 Microsoft 分布式事務(wù)處理協(xié)調(diào)器文檔。
默認(rèn)情況下,任何有效用戶都擁有 BEGIN DISTRIBUTED TRANSACTION 權(quán)限。
本例在本地和遠(yuǎn)程數(shù)據(jù)庫上更新作者的姓。本地和遠(yuǎn)程數(shù)據(jù)庫將同時提交或同時回滾本事務(wù)。
說明 除非正在運行 Microsoft® SQL Server™ 的計算機(jī)上當(dāng)前裝有 MS DTC,否則本例會產(chǎn)生錯誤信息。關(guān)于安裝 MS DTC 的更多信息,請參見 Microsoft 分布式事務(wù)處理協(xié)調(diào)器文檔。
USE pubs相關(guān)文章
GO
BEGIN DISTRIBUTED TRANSACTION
UPDATE authors
SET au_lname = 'McDonald' WHERE au_id = '409-56-7008'
EXECUTE remote.pubs.dbo.changeauth_lname '409-56-7008','McDonald'
COMMIT TRAN
GO