2017-08-30 30 views
4

私は2つの別個の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/relational-databases/system-stored-procedures/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 
関連する問題