我需要从临时表的数据更新表。
有一个 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
将#YourTempTableName
和YourTableName
替换为实际的表名。请注意,仅当两个表之间只有一个匹配的列名时,此方法才有效。如果找到多个匹配项,则此查询将引发错误。此外,这假设表中的两个 id 列都称为"id",否则,您必须使用实际的 id 列名称更新 join 语句。