1

我想使用INFORMATION_SCHEMA.COLUMNS来帮助我更快地为具有许多列的表构建存储过程。

例如,对于有 100 列的表的 MERGE 语句中的更新子句,我必须执行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 函数的查询中执行此操作。

4

1 回答 1

1

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

如果您希望输出是 varchar 而不是 xml,请使用强制转换

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))
于 2012-08-20T11:51:24.240 回答