2011-08-08 5 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이 관련되어있을 경우 예상하지 못했지만)을 수행 할 수 있기 때문에 유혹에 빠질 수 있습니다. 그러나 정확한 사용법/시나리오에 따라 다릅니다.

  1. 데이터를 선택 당신은

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

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

고맙습니다. 나는 #tmp 테이블에 대해 몰랐다. 두 번째 문에서 ... 쉽게 어쨌든 – Werner

+0

를 가독성에 관한 것은 작은 실수는 삶이었다 만들고, 올바른은 다음과 같습니다 #tmpTable t INNER 가입 EPI2 FROM UPDATE EPI2..EPI.PLANT SET KIND_OF_LIQUIDATION_NO = 1, LIQUIDATION_DATE = t.DeathDate .. EPI.PLANT p on t.IMONo = p.IMONo – Werner

관련 문제