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