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

问题描述:

我正在本地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); 
+1

啊,错过了我的问题的重要组成部分 - 我似乎只能使用OPENQUERY - 我不能直接引用链接的se建议格式的表格。 –