Ich möchte Ihnen mitteilen, wie ich diese Art von Frage anspreche. Mein Fall ist etwas anders, da das Ergebnis von Tabelle2 dynamisch ist und die Spaltennummern möglicherweise kleiner als die von Tabelle1 sind. Das Konzept ist jedoch dasselbe.
Erhalten Sie zuerst das Ergebnis von Tabelle2.
Als nächstes drehen Sie es auf.
Schreiben Sie dann die Aktualisierungsabfrage mit dynamischem SQL. Beispielcode wurde zum Testen von 2 einfachen Tabellen geschrieben - tblA und tblB
--CREATE TABLE tblA(id int, col1 VARCHAR(25), col2 VARCHAR(25), col3 VARCHAR(25), col4 VARCHAR(25))
--CREATE TABLE tblB(id int, col1 VARCHAR(25), col2 VARCHAR(25), col3 VARCHAR(25), col4 VARCHAR(25))
--INSERT INTO tblA(id, col1, col2, col3, col4)
--VALUES(1,'A1','A2','A3','A4')
--INSERT INTO tblB(id, col1, col2, col3, col4)
--VALUES(1,'B1','B2','B3','B4')
DECLARE @id VARCHAR(10) = 1, @TSQL NVARCHAR(MAX)
DECLARE @tblPivot TABLE(
colName VARCHAR(255),
val VARCHAR(255)
)
INSERT INTO @tblPivot
SELECT colName, val
FROM tblB
UNPIVOT
(
val
FOR colName IN (col1, col2, col3, col4)
) unpiv
WHERE id = @id
SELECT @TSQL = COALESCE(@TSQL + '''
,','') + colName + ' = ''' + val
FROM @tblPivot
SET @TSQL = N'UPDATE tblA
SET ' + @TSQL + '''
WHERE id = ' + @id
PRINT @TSQL
--EXEC SP_EXECUTESQL @TSQL
PRINT @TSQL
Ergebnis: