如何从本地结果集中更新链接服务器查询中的 table?

How to update a table in a linked server query from a local result set?

我正在 运行 在本地 sql 服务器实例上安装一个存储过程。

SQL 服务器实例链接到我们 i 系列上的 DB2 实例。

我有一个结果集,它是使用连接到本地 table 的 OPENQUERY 语句生成的。它只是一个 ID 列表。

我现在如何 运行 更新,使用 OPENQUERY,

    WHERE id IN (idListFromPreviousQuery)

类型声明。

理想情况下,我正在寻找一个基于集合的解决方案,而不是基于游标/循环的解决方案,我真的无法理解如何解决这个问题。

您可以使用 WITH 或 temp_table:

SELECT id
INTO #temptable
FROM ...;

UPDATE linked_server.db_name.schema_name.table_name
SET col_name = ...
WHERE id IN (SELECT id FROM #temptable);

或:

WITH cte(id) AS (
 SELECT id
 FROM ...
)
UPDATE linked_server.db_name.schema_name.table_name
SET col_name = ...
WHERE id IN (SELECT id FROM cte);

编辑:

WITH cte(id) AS (
     SELECT id
     FROM ...
    )
UPDATE oq 
SET    col_name = ...
FROM   OPENQUERY([LINKEDSERVER],    'select ... from ...') oq 
WHERE oq.id IN (SELECT id FROM cte);