2011-08-08 9 views
0

リンクサーバーでクエリの結果も更新したいと思っています。ネストされたサブクエリを使用したリンクサーバーの更新

最初のSQLスニペットは、私に更新される値を与える:

SELECT mmdb_vessel.IMONo, mmdb_vessel.DeathDate 
From OPENQUERY(MMDB, 'SELECT FunctionalLocation, IMONo, VesselStatus, CONVERT(VARCHAR(10), DeathDate, 102) AS DeathDate 
      FROM VESSEL 
      WHERE VESSEL.VesselStatusID <> 42 AND VESSEL.DeathDate is not null') as mmdb_vessel 
, eb_all_v 
WHERE 
eb_all_v.IMO_No = mmdb_vessel.IMONo 
AND eb_all_v.status = 'in service' 

第二は、それは私が達成したいかを示す必要があり、私は実装することができないんだけど、実はある:

UPDATE EPI2..EPI.PLANT 
SET KIND_OF_LIQUIDATION_NO = 1 
, LIQUIDATION_DATE = [result from snippet above].DeathDate 
Where EPI2..EPI.PLANT.IMONo = [result from snippet above].IMONo 

私の説明が十分であるかどうか分からないので、お気軽に追加情報をお尋ねください!すでに事前に

おかげで、 ヴェルナー

+0

を更新を実行し?エラーやその他の制限がありますか? – JNK

答えて

0

私が最初にリモートサーバからのデータを選択して、例えば、必要なデータを保存するために推薦しますLinkedServerと更新プログラムはいくつかの副作用を伴う可能性があるため(例えば、リモートテーブルでテーブルスキャンを実行する、updaetが関わっていると予想できない場合など)、正確な使用法やシナリオによって異なります。あなたは

SELECT * INTO #tmpTable FROM LINKEDSERVER.EPI.dbo.PLANT WHERE ....

  1. を更新する必要が

    1. データを選択し、あなたの理想的なクエリを実行できないのはなぜローカルサーバー上

    UPDATE EPI2..EPI.PLANT SET KIND_OF_LIQUIDATION_NO = 1, LIQUIDATION_DATE = t.DeathDate FROM #tmpTable t INNER JOIN EPI2..EPI.PLANT p on t.IMONo = p.IMONo

+0

ありがとうございました。私は#tmpTableについて認識していませんでした。とにかく読みやすさのための人生をもっと楽にしてくれます... – Werner

+0

2番目のステートメントで小さな間違いがありましたが、正しいです: UPDATE EPI2..EPI.PLANT SET KIND_OF_LIQUIDATION_NO = 1、LIQUIDATION_DATE = t.DeathDate FROM #tmpTable INNER JOIN EPI2 .. EPI.PLANT p on t.IMONo = p.IMONo – Werner

関連する問題