リンク サーバーのデータベース テーブルで SQL MERGE 関数を使用することはできますか? 最終的な目標は、リモート テーブルをローカル SQL サーバー テーブルと同期することです。オンラインでいくつかの調査を行いましたが、関連する情報は見つかりませんでした。可能であれば、ソース ステートメントとターゲット ステートメントをどのようにセットアップしますか?
4 に答える
@Mikael Eriksson のコメントを繰り返しますが、できます。MERGEのターゲットをリモートにすることはできませんが、MERGE のソースをリモートにすることはできます。したがって、FL のサーバーから MERGE ステートメントを実行できる場合、それは十分に可能です。たとえば、FL の削除サーバーで次のようなものを実行できます。
MERGE INTO "local FL table" USING "CT server"."database"."schema"."same table" ON ...
どうやら私の研究は十分ではありませんでした.MSDNで正しく述べられています:「target_tableはリモートテーブルにすることはできません」...それでこの質問に答えます...
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