我想使用INFORMATION_SCHEMA.COLUMNS
帮助我更快地为包含许多列的表构建存储过程。
例如,对于包含100列的表的MERGE语句中的update子句,我必须执行COLUMN_1 = SOURCE.COLUMN1, COLUMN2...
100次,这是不愉快的。
我知道我可以从对象浏览器编写脚本update / create / etc语句,但我想更多地控制格式化。所以:
此查询输出上面列出的每个列的更新格式:
select column_name + ' = SOURCE.' + column_name + ', '
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'TableName'
不幸的是,它会产生多个结果:
COLUMN_1 = SOURCE.COLUMN_1,
COLUMN_2 = SOURCE.COLUMN_2,
etc.
问题:
有人可以告诉我如何将上面的查询修改为连接所有结果,以便输出看起来更像:
COLUMN_1 = SOURCE.COLUMN_1, COLUMN_2 = SOURCE.COLUMN_2, etc.
PS:我知道如何使用游标循环并实现此结果。为了这个目的,我想在一个带有数据透视或一些T-SQL函数的查询中找到一种方法,但如果可能的话。
答案 0 :(得分:1)
如果你想要输出将是varchar而不是xml使用cast
select cast((select column_name + ' = SOURCE.' + column_name + ', '
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'TableName'
FOR XML PATH(''))
as varchar)
你也可以使用变量
declare @str varchar(8000) = ''
select @str += column_name + ' = SOURCE.' + column_name + ', '
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'TableName'
set @str = left(@str,len(@str))