用列名中的下划线动态替换空格

时间:2019-05-01 22:47:33

标签: sql sql-server tsql

我试图用下划线动态替换列名中的空白。到目前为止,我已经编写了以下代码,但是,此代码使用实际的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 个答案:

答案 0 :(得分:1)

马丁·史密斯(Martin Smith)是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)