2017-08-07 16 views
0

リンクサーバー上のテーブルで、現在のサーバー上のテーブルの情報を使用して更新を実行しようとしています。 1つのテスト行は、ここに私のクエリですselect文を使用してlinkedserverテーブルのupdateを実行する

UPDATE OPENQUERY (LINKEDSERVER, 'SELECT FIELD1, FIELD2, FIELD3, FIELD4 FROM 
SPV.DBO.TESTTABLE') 
SET FIELD1 = LT.FIELD1, 
    FIELD2 = LT.FIELD2, 
    FIELD3 = LT.FIELD3, 
    FIELD4 = LT.FIELD4 
FROM OPENQUERY (LINKEDSERVER, 'SELECT FIELD1, FIELD2, FIELD3, FIELD4 FROM 
SPV.DBO.TESTTABLE') L 
INNER JOIN LOCALTESTTABLE LT ON LT.FIELD1 = L.FIELD1 COLLATE 
Latin1_General_CI_AS  
AND LT.FIELD2 = L.FIELD2 COLLATE Latin1_General_CI_AS 

答えて

0

これはあなたのために機能しますか?

UPDATE L 
    SET FIELD1 = LT.FIELD1, 
     FIELD2 = LT.FIELD2, 
     FIELD3 = LT.FIELD3, 
     FIELD4 = LT.FIELD4 
FROM LINKEDSERVER.SPV.DBO.TESTTABLE INNER JOIN 
    LOCALTESTTABLE LT 
    ON LT.FIELD1 = L.FIELD1 COLLATE Latin1_General_CI_AS AND 
     LT.FIELD2 = L.FIELD2 COLLATE Latin1_General_CI_AS; 

4部構成の名前付けがOPENQUERY()よりも簡単です。

あなたのバージョンでも動作するかもしれませんが、あなたはupdateのエイリアスを使用する必要があります。

UPDATE L 
    SET FIELD1 = LT.FIELD1, 
     FIELD2 = LT.FIELD2, 
     FIELD3 = LT.FIELD3, 
     FIELD4 = LT.FIELD4 
FROM OPENQUERY (LINKEDSERVER, 'SELECT FIELD1, FIELD2, FIELD3, FIELD4 FROM 
SPV.DBO.TESTTABLE') L INNER JOIN 
    LOCALTESTTABLE LT 
    ON LT.FIELD1 = L.FIELD1 COLLATE Latin1_General_CI_AS AND 
     LT.FIELD2 = L.FIELD2 COLLATE Latin1_General_CI_AS ; 

そうでない場合は、あなたがテーブルのすべての行を更新しています。

+0

はい、それは機能しますが、元のコードでは、私がオープンクエストでそれをやろうとしている理由は、元のコードが現在4部構成の名前で実行されていますが、完了するために、パフォーマンスを向上させるためにこの変更を行うように求められました。 – Rafaetti

+0

助けてくれてありがとう、問題は行方不明のエイリアスでした! – Rafaetti

関連する問題