2010-11-13 96 views
2

我想通過鏈接服務器更新行。我在本地SQL-Server上用this指令創建了鏈接服務器。來自鏈接服務器的SQL-Server觸發器更新問題

我可以使用下面的代碼更新查詢分析器上的行。沒有錯誤返回並且行更新鏈接服務器上成功。

UPDATE [LinkedServer].[Database].[dbo].[Table] 
SET A = 'A', B = 'B' 
WHERE id = 1 

但是,當我創建了一個更新觸發器,以我的表像下面我本地SQL Server上,

ALTER TRIGGER [TriggerLocalServerTable] 
    ON dbo.[LocalServerTable] 
    FOR UPDATE 
AS 

DECLARE @A varchar(4) 
DECLARE @B varchar(4) 
DECLARE @id int 

BEGIN 
SELECT 
@A = A, 
@B = B, 
@id = id 
FROM inserted 

UPDATE [LinkedServer].[Database].[dbo].[Table] 
SET A = @A, B = @B 
WHERE id = @id  
END 

當觸發執行,返回此錯誤象下面,

OLE DB鏈接的提供商「SQLNCLI」 服務器「LinkedServer」返回的消息 「合作伙伴交易管理器已禁止 支持 遠程/網絡事務。「。消息 7391,級別16,狀態2,TriggerLocalServerTable,45號線 因爲OLE DB提供程序「SQLNCLI」爲 鏈接服務器「LinkedServer」無法 啓動分佈式事務操作無法進行 程序 。

我申請this指令本地服務器解決問題,任何更改。

更多詳情;

  • 如果定義我的鏈接服務器與其 遠程IP地址。
  • 我的本地服務器和鏈接服務器 不在同一個域中。
  • 鏈接服務器的安全設置是 「被 國產使用此安全上下文」
  • 本地服務器版本在Windows Server 2003的SP2,SQL-Server版本是2005 非標準。
  • 鏈接的服務器操作系統版本是2008和 SQL-Server版本2008(64位)。
  • 我無法使用RDP訪問遠程服務器
    。我只能從sql 端口(1433)訪問。
  • 我將「安全選項」中的鏈接服務器「RPC」和「RPC 輸出」設置爲「真」。

你有什麼想法解決這個問題。 現在非常感謝你。

編輯: 我解決了這個問題。首先,我在[TriggerLocalServerTable]上創建了更新觸發器。這個觸發器的工作是將新的更新字段插入到本地表中。這張新表格用於更新臨時數據。然後,我創建了一個每小時都在LinkedServer上運行更新文件的作業。此作業從臨時表中獲取數據,然後更新到LinkedServer表的字段。

問候,Kerberos。

回答

1

您是否在Windows Server上安裝了分佈式事務處理協調器?如果你的更新是在一個事務中進行的,那麼沒有它就無法工作。 請參閱 link text

+0

是的,它的本地服務器和「分散安裝致敬的交易協調員「servis雕像是」開始「的。但如果你問關於鏈接服務器,我不知道。因爲我不能訪問這個服務器。 – Kerberos 2010-11-13 12:51:22

0

問題不在於SQL Server與ODBC驅動程序。

  • ,開始 - >設置 - >控制面板 - >管理工具>數據源
  • 開放系統DSN選項卡
  • 選擇驅動程序,您使用的鏈接服務器,然後單擊配置
  • 選擇高級> Flags3和取消選中禁用事務複選框

問題解決了:)

+1

這似乎不是答案。原始海報(OP)已經在編輯中爲問題提供了答案。 – bobs 2011-07-14 00:23:46

+0

有三個DNS .. USER DNS,系統DNS和文件DNS whixch我將使用 – 2013-03-13 12:01:07