如何在T-SQL中更改SQL Server列名?

6

我有一个表格,从一个包含特殊字符 % _ -CSV文件中导入了600多列。

有没有办法更改列名以删除这些特殊字符?

代码可以使用T-SQL。


3
我不了解tsql,但我认为我知道tsql中的答案。 - JohnFx
4个回答

9

sp_rename是什么?

EXEC sp_rename 'table.[Oh%Dear]', 'OhDear', 'COLUMN';

示例(不确定 sp_rename 中的 [ ]

CREATE TABLE foo ([Oh%Dear] int)

EXEC sp_rename 'foo.[Oh%Dear]', 'OhDear', 'COLUMN'

EXEC sys.sp_help 'foo'

8

您可以查询 INFORMATION_SCHEMA.COLUMNS 并生成 sp_rename 脚本来重命名列。

SELECT 'EXEC sp_rename ''' + TABLE_NAME + '.' + QUOTENAME(COLUMN_NAME) + ''', ''' + REPLACE(COLUMN_NAME, '%', '') + ''', ''COLUMN''; '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%[%]%'

这里有一个可运行实例的永久链接


5
你能使用这个吗?
sp_RENAME 'Table.ColumnName%', 'NewColumnName' , 'COLUMN'

3

以下是一个示例,它将循环遍历表并更改下划线和百分号:

create table Test ([col%1] varchar(50),[col_2] varchar(40))
go

select identity(int,1,1) as id ,column_name,table_name into #loop
 from information_schema.columns
where table_name = 'Test'
and column_name like '%[%]%'
or column_name like '%[_]%'


declare @maxID int, @loopid int
select @loopid =1
select @maxID = max(id) from #loop

declare  @columnName varchar(100), @tableName varchar(100)
declare  @TableColumnNAme varchar(100)
while @loopid <= @maxID
begin


select @tableName = table_name , @columnName = column_name
from #loop where id = @loopid

select @TableColumnNAme = @tableName + '.' + @columnName
select @columnName = replace(replace(@columnName,'%',''),'_','')
EXEC sp_rename @TableColumnNAme, @columnName, 'COLUMN';

set @loopid = @loopid + 1
end

drop table #loop

select * from Test

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接