使用嵌套子查询更新链接服务器

时间:2011-08-08 11:57:17

标签: sql-server subquery linked-server

我想在链接服务器上更新查询结果以及链接服务器。

第一个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 :(得分:0)

我建议先从远程服务器中选择数据并存储所需的数据,例如在temptable中,因为LinkedServer和更新可能会产生一些副作用(例如,在远程表上执行表扫描,如果涉及更新,你不会想到它等) - 但这取决于你的确切用法/场景。

  1. 选择您需要更新的数据
  2. SELECT * INTO #tmpTable FROM LINKEDSERVER.EPI.dbo.PLANT WHERE ....

    1. 在本地服务器上执行更新
    2. 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