从 SQL Server 中使用动态列名称的临时表更新表



我需要从临时表的数据更新表。

有一个 id 列需要在 2 个表之间匹配以更新好行。

问题是除了id,我需要更新其他一些列,但我不会知道临时表中列的名称,因为临时表的创建也是动态的。

所以我需要动态查找两个表之间的列名匹配,然后将右列从临时表更新到另一个表。

SELECT *
FROM tempdb.sys.columns
WHERE object_id = Object_id('tempdb..#AccountId');

有了它,我可以获取临时表列的名称。

但是在我不能走得更远之后

可以将匹配的列名存储到变量中,并使用 T-SQL 使用变量中存储的名称构造查询。

DECLARE @col_name varchar(128), @sql_stmt varchar(1000)
SET @col_name = (
SELECT name
FROM tempdb.sys.columns
WHERE object_id = Object_id('tempdb..#YourTempTableName')
and name in (
SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'YourTableName'
)
)
SET @sql_stmt = ('
UPDATE YourTableName 
SET ' + @col_name + ' = t2.' + @col_name +'
FROM YourTableName t1
JOIN #YourTempTableName t2 on t1.id = t2.id'
)
EXEC @sql_stmt

#YourTempTableNameYourTableName替换为实际的表名。请注意,仅当两个表之间只有一个匹配的列名时,此方法才有效。如果找到多个匹配项,则此查询将引发错误。此外,这假设表中的两个 id 列都称为"id",否则,您必须使用实际的 id 列名称更新 join 语句。

最新更新