SQL итерирует по information_schema.columns - PullRequest
0 голосов
/ 30 августа 2011

У меня есть таблица SQL Server с 100 столбцами.Я хотел бы сделать это для каждого столбца:

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 Ответ

4 голосов
/ 30 августа 2011

Что-то в этом роде сделает это.

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.

...