復制代碼 代碼如下:
--BEGIN DISTRIBUTED TRANSACTION [transactionname]
--標志一個由分布式事務處理協調器MSDTC管理的TSQL分布式事務開始
--SERVER A服務器為主控服務器。當連接發出後續COMMIT TRANSACTION或
--ROLLBACK TRANSACTION語句時,主控服務器請求MSDTC在所涉及的服務器間管理
--分布式事務的完成
--SQLSERVER使用鏈接服務器或者遠程服務器作為分布式事務處理的平台,提供
--遠程存儲過程調用和分布式查詢
--當使用分布式事務進行一個遠程存儲過程調用和一個分布式查詢時,在SERVER A
--上發出BEGIN DISTRIBUTED TRANSACTION ,該連接調用SERVER B上的存儲過程
--和SERVER C上的另一個存儲過程,並且SERVER C上的存儲過程對SERVER D執行一個
--分布式查詢,則四個SQLSERVER服務器進入分布式事務中,SERVER A是該事務的創建者
--和控制服務器
--創建分布式事務,在本地和遠程數據庫同時刪除一條記錄,其中,遠程SQLSERVER
--的實例名稱為RemoteServer。本地和遠程數據庫同時提交或同時回滾該事務。
--注意,執行分布式查詢或調用存儲過程時,使用4部分名稱限定規則
--前提:本機的MSDTC和遠程機器的MSDTC服務要打開
--本機和遠程機器能互相ping通
--數據庫端口能互相telnet通
--創建一個鏈接服務器到遠程機器WIN7U-20130414Z
USE [GPOSDB]
GO
SELECT * FROM [SystemPara] WHERE [Name]='HDTPort'
SELECT * FROM [WIN7U-20130414Z].[GPOSDB].dbo.[SystemPara] WHERE [Name]='HDTPort'
USE [GPOSDB]
GO
BEGIN DISTRIBUTED TRANSACTION
--從本地數據庫刪除一條記錄
DELETE FROM [JOE].[GPOSDB].[DBO].[SystemPara]
WHERE [Name]='HDTPort'
--從遠程數據庫中刪除一條記錄
DELETE FROM [GPOSDB].[dbo].[SystemPara]
WHERE [Name]='HDTPort'
COMMIT TRAN
GO
--個人嘗試了下是由於在雙向的sql server訪問中采用了鏈式方式訪問(LinkedServer方式),
--遇到這種情況只需要將原來訪問對方數據庫的語句:
--select * from linkedServerA.dbo.table1
--修改為:
--select * from dbo.table1即可。
--標記下,以便以後解決。