如何从本地结果集更新链接服务器查询中的表?
问题描述:
我正在本地sql服务器实例上运行存储过程。如何从本地结果集更新链接服务器查询中的表?
SQL服务器实例链接到我们的i系列上的DB2实例。
我有一个结果集是使用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);
啊,错过了我的问题的重要组成部分 - 我似乎只能使用OPENQUERY - 我不能直接引用链接的se建议格式的表格。 –