Динамически заменять пробелы на подчеркивания в именах столбцов - PullRequest
1 голос
/ 02 мая 2019

Я пытаюсь динамически заменить пустое пространство в именах моих столбцов подчеркиванием. До сих пор я написал следующий код, однако этот код обновляет имя нового столбца с помощью фактического оператора REPLACE в виде строки, а не заменяет его как функцию:

select b.column_id,b.name
into #container2
from sys.tables a
join sys.columns b
    on a.object_id = b.object_id
where a.name = 'my_table'

declare @id int
declare @columnName varchar(255)
declare @sql varchar(max)

set @id = 1
select @columnname = name from #container2 where column_id = @id

while @id <= 73
begin

    set @sql = 'EXEC sp_RENAME ''db.my_table.[' + @columnName + ']'', ''REPLACE([' + @columnName + '], '''' '''', ''''_'''')'', ''COLUMN''' 
    print @sql
    --exec(@sql)

    set @id = @id + 1
    select @columnname = name from #container2 where column_id = @id
end

Я пытался переместить свой оператор REPLACE за пределы моей новой строки столбца, но это не помогло.

Мой ожидаемый результат:

old column name: Apple Pie
new column name: Apple_Pie

1 Ответ

1 голос
/ 02 мая 2019

Мартин Смит на 100% прав ... даже при условии, что нужно переименовать много столбцов.

Подобные оптовые изменения могут вызвать проблемы, путаницу и коллизии.

Тем не менее, вот небольшой динамический SQL, который вы можете выполнять с осторожностью. Обратите внимание, что я печатаю SQL, а не выполняю его.

Пример

Declare @SQL varchar(max) = ''

Select @SQL = @SQL + 'EXEC sp_rename '''  + quotename(table_name)+'.' + quotename(column_name) +''',''' + replace(column_name,' ','_') + ''';'+char(13) 
  From INFORMATION_SCHEMA.COLUMNS
  Where charindex(' ',Column_Name)>0
    and table_name = 'SomeDesiredTableName'

Print @SQL
--Exec(@SQL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...