sql - 用列名中的下划线动态替换空格
问题描述
我正在尝试用下划线动态替换列名中的空格。到目前为止,我已经编写了以下代码,但是,此代码使用实际的 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
解决方案
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)
推荐阅读
- javascript - NPM 和 Eslint:这很混乱,这正常吗?
- java - 为什么我会收到 IndexOutOfBoundsException
- eclipse - Eclipse-PlatformFilter 文档
- actionscript-3 - 如何解决 AS3 中的图例错误#2025?
- javascript - 反应将导入名称作为道具传递并添加到图像 src
- java - 从 JDBC 中以批处理模式选择不同的实体
- html - 设置 gcloud apppot 域 - 找不到 URL 错误
- html - 为什么我的 Flexbox 在底部留下一个巨大的空隙?
- python - Golang 和 Python 执行 http 请求的方法的根本区别?
- android - 为 Android ARM 交叉编译 glibc - 配置错误