如何从本地结果集中更新链接服务器查询中的 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);
我正在 运行 在本地 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);