Обновление на связанном сервере с вложенным подзапросом - PullRequest
0 голосов
/ 08 августа 2011

Я хочу обновить на связанном сервере также результат запроса со связанного сервера.

Первый фрагмент 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 

Я не уверен, достаточно ли моего объяснения, пожалуйста, не стесняйтесь просить дополнительныеинформация!

Спасибо, уже заранее, Вернер

1 Ответ

0 голосов
/ 08 августа 2011

Я бы порекомендовал сначала выбрать данные с удаленного сервера и сохранить требуемые данные, например, в файле temptable, поскольку LinkedServer и обновления могут иметь некоторые побочные эффекты (например, выполнение сканирования таблицы на удаленной таблице, хотя вы этого не ожидаете, еслииспользуется обновление и т. д.), но это зависит от вашего точного использования / сценария.

  1. Выберите данные, которые необходимо обновить

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

  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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...