2017-08-30 41 views
4

我有兩個獨立的SQL服務器,我們稱它們爲A_server和B_server。在A_server上存在插入/刪除/更新時,應該在B_server上插入/刪除/更新該行。我發現一噸的例子,對如何當兩個表都在同一臺服務器上的代碼數據觸發,例如:插入後的數據觸發器 - 插入到另一個服務器的表中

CREATE TRIGGER yourNewTrigger ON yourSourcetable 
FOR INSERT 
AS 
    INSERT INTO yourDestinationTable 
    (col1, col2 , col3, user_id, user_name) 
    SELECT 'a' 
     , default 
     , null 
     , user_id 
     , user_name 
    FROM inserted 
GO 

但我還沒有找到一個數據觸發在那裏的表之間進行的任何實例在不同的服務器上。連接字符串的位置究竟是什麼?它看起來像什麼?

+0

你有一個[鏈接服務器](https://docs.microsoft.com/en-us/sql /關係數據庫/系統存儲過程/ sp-addlinkedserver-transact-sql)配置?語法如[linkedservername]。[databasename]。[schemaname]。[tablename] –

+3

雖然您可以通過鏈接服務器和觸發器執行此操作,但最終還是會發生分佈式事務。如果您的場景涉及該行的簡單副本(沒有有趣的處理),請考慮使用[事務複製](https://docs.microsoft.com/sql/relational-databases/replication/transactional/transactional-replication)。 –

+1

你認爲複製嗎? –

回答

1

也許這可以幫助你。

首先,創建鏈接的服務器

use master 
exec sp_addlinkedserver 
    @server='NameOf_LinkedServer', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='yourServer\instance1'; 

,然後指向它

CREATE TRIGGER yourNewTrigger ON yourSourcetable 
FOR INSERT 
AS 
    INSERT INTO NameOf_LinkedServer.DataBaseName.Owner.yourDestinationTable 
    (col1, col2 , col3, user_id, user_name) 
    SELECT 'a' 
     , default 
     , null 
     , user_id 
     , user_name 
    FROM inserted 
相關問題