我有一个包含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。
答案 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的有用评论。