SQL组合信息模式查询以帮助构建大型存储过程

时间:2012-08-10 15:33:42

标签: sql database tsql sql-server-2008-r2

我想使用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函数的查询中找到一种方法,但如果可能的话。

1 个答案:

答案 0 :(得分:1)

正如EricZ所说,你需要在最后添加FOR XML PATH('')

如果你想要输出将是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))