Динамическая инструкция update с именами переменных столбцов

мы хотим сделать обновление в нескольких базах данных SQL Server, чтобы изменить все значения NULL в определенной таблице на пустые строки вместо NULL. Мы потенциально будем делать это через сотни баз данных. Имя таблицы всегда будет одинаковым, но имена столбцов являются переменными в зависимости от того, как настроено приложение переднего плана (не судите... Я не создавал эту систему).

есть ли способ сделать обновление для всех этих столбцов, не зная столбец имена заранее?

3 ответов


вы можете передать имя столбца в динамическом SQL:

declare @sql nvarchar (1000);
set @sql = N'update table set ' + @column_name + '= ''''';

exec sp_executesql @sql;

вы можете посмотреть в sys.columns table и join на имя таблицы или object_id.

 DECLARE @OBJ_ID INT

 SELECT @OBJ_ID = OBJECT_ID
 FROM SYS.tables
 WHERE name = 'YOURTABLE'

 SELECT * FROM SYS.columns
 WHERE OBJECT_ID = @OBJ_ID

можно использовать name поле от sys.столбцы запрашивают в качестве основы для выполнения обновления.


предполагая, что вы хотите только все столбцы типов varchar / char (или измените фильтр типов на все, что вам нужно):

DECLARE @tableName varchar(10)
SET @tableName = 'yourtablenamehere'

DECLARE @sql VARCHAR(MAX)
SET @sql = ''

SELECT @sql = @sql + 'UPDATE ' + @tableName + ' SET ' + c.name + ' = '''' WHERE ' + c.name + ' IS NULL ;'
FROM sys.columns c
INNER JOIN sys.tables t ON c.object_id = t.object_id
INNER JOIN sys.types y ON c.system_type_id = y.system_type_id
WHERE t.name = @tableName AND y.name IN ('varchar', 'nvarchar', 'char', 'nchar')

EXEC (@sql)