2017-10-08 1 views
1

Ich führe eine gespeicherte Prozedur auf einer lokalen SQL Server-Instanz.Wie aktualisiert man eine Tabelle in einer Verbindungsserver-Abfrage von einer lokalen Ergebnismenge?

Die SQL Server-Instanz ist mit einer DB2-Instanz auf unserer i-series verbunden.

Ich habe eine Ergebnismenge, die mit einer OPENQUERY-Anweisung erzeugt wird, die an eine lokale Tabelle angefügt ist. Es ist nur eine Liste von IDs.

Wie kann ich jetzt ein Update ausführen, mit OPENQUERY, mit einer

WHERE id IN (idListFromPreviousQuery) 

Typ-Anweisung.

Idealerweise suche ich nach einer Set-basierten Lösung, die nicht auf Cursor/Schleife basiert, ich kann einfach nicht verstehen, wie ich das anstellen soll.

Antwort

1

Sie könnten WITH oder temp_table verwenden:

SELECT id 
INTO #temptable 
FROM ...; 

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

oder:

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); 

EDIT:

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

Ahh, eine wichtige Rolle in meiner Frage verpasst - ich scheine nur in der Lage sein, OPENQUERY zu verwenden - ich kann nicht direkt auf das verknüpfte se verweisen rver Tabellen im vorgeschlagenen Format. –

Verwandte Themen