2017-10-08 78 views
1

我正在本地sql服務器實例上運行存儲過程。如何從本地結果集更新鏈接服務器查詢中的表?

SQL服務器實例鏈接到我們的i系列上的DB2實例。

我有一個結果集是使用OPENQUERY語句加入到本地表中生成的。它只是一個ID列表。

我現在該如何運行的更新,使用OPENQUERY,具有

WHERE id IN (idListFromPreviousQuery) 

類型的語句。

理想情況下,我正在尋找一個基於集合的解決方案,而不是基於光標/循環,我真的不能得到我的頭如何去做這件事。

回答

1

你可以使用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建議格式的表格。 –