14

リンク サーバーのデータベース テーブルで SQL MERGE 関数を使用することはできますか? 最終的な目標は、リモート テーブルをローカル SQL サーバー テーブルと同期することです。オンラインでいくつかの調査を行いましたが、関連する情報は見つかりませんでした。可能であれば、ソース ステートメントとターゲット ステートメントをどのようにセットアップしますか?

4

4 に答える 4

21

@Mikael Eriksson のコメントを繰り返しますが、できます。MERGEのターゲットをリモートにすることはできませんが、MERGE のソースをリモートにすることはできます。したがって、FL のサーバーから MERGE ステートメントを実行できる場合、それは十分に可能です。たとえば、FL の削除サーバーで次のようなものを実行できます。

MERGE INTO "local FL table" USING "CT server"."database"."schema"."same table" ON ...
于 2013-11-06T17:39:16.520 に答える
6

どうやら私の研究は十分ではありませんでした.MSDNで正しく述べられています:「target_tableはリモートテーブルにすることはできません」...それでこの質問に答えます...

于 2013-03-11T16:02:09.597 に答える
-1

Yoy はいつでも、おそらくストアド プロシージャとして、サーバーで EXEC('SQL CODE HERE')AT YOUR_LINKED_SERVER を使用できます。

これにより、リンク サーバーで必要なクエリが実行されるため、ローカル テーブル (target_table) をサーバー テーブル (source) とマージできます。

これは、クライアントから呼び出されるサーバーのストアド プロシージャで使用するコードです。サーバー内のクライアント exec ストアド プロシージャ -> サーバー Exec クエリは、同じ情報 (従業員) で異なるリンク サーバー (クライアント) を更新します。

    EXEC('
SET IDENTITY_INSERT PVBC.DBO.empleadas ON

MERGE INTO PVBC.DBO.empleadas A
USING(
    SELECT id_empleada, nombre, apellidos
    FROM SERVIDOR.PVBC_SERVIDOR.DBO.empleadas) TA
ON (A.id_empleada =TA.id_empleada)
WHEN MATCHED THEN
UPDATE 
    SET A.nombre=TA.nombre,
        A.apellidos=TA.apellidos
WHEN NOT MATCHED THEN

    INSERT 
        (id_empleada, nombre, apellidos)
    VALUES
        (id_empleada, nombre, apellidos);

SET IDENTITY_INSERT PVBC.DBO.empleadas OFF
')AT MEGA --This is one of my linked servers
于 2014-03-13T16:41:33.647 に答える