SQL遍历information_schema.columns

时间:2011-08-30 19:40:06

标签: sql-server tsql iteration

我有一个包含100列的SQL Server表。我想对每一栏都这样做:

UPDATE 2011INFODATA
SET [Attribute_Code_1] = ltrim(rtrim(Attribute_Code_1))
WHERE len(ltrim(rtrim(Attribute_Code_1))) > 0

我的问题是我如何使用informatin_schema.columns动态生成或插入上述SQL中的各种列名?

我当然可以手动为每一列做到并获得相同的结果。但这并不好玩,我想在许多表中使用相同的sql。

1 个答案:

答案 0 :(得分:4)

这些方面的东西都可以做到。

DECLARE @Sql nvarchar(max)
SET @Sql = '';
SELECT @Sql = @Sql + '
    UPDATE 2011INFODATA
    SET ' + QUOTENAME(COLUMN_NAME) + ' = ltrim(rtrim(' + QUOTENAME(COLUMN_NAME) + '))
    WHERE len(ltrim(rtrim(' + QUOTENAME(COLUMN_NAME) + '))) > 0'
FROM information_schema.columns
WHERE TABLE_NAME = '2011INFODATA' AND DATA_TYPE LIKE '%char'
EXEC sp_executesql @Sql

编辑:更新了示例SQL以包含@billinkc,@ Martin Smith,@ Aaron Bertrand的有用评论。