Как изменить имена столбцов SQL Server в T-SQL? - PullRequest
6 голосов
/ 27 мая 2010

У меня есть таблица с 600+ столбцами, импортированными из файла CSV со специальными символами % _ - в именах столбцов.Есть ли способ изменить имена столбцов, чтобы удалить эти специальные символы?

Код может быть в T-SQL.

Ответы [ 4 ]

9 голосов
/ 27 мая 2010

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 голосов
/ 27 мая 2010

Вы можете запросить 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 голосов
/ 27 мая 2010

Вы можете использовать это?

sp_RENAME 'Table.ColumnName%', 'NewColumnName' , 'COLUMN'
3 голосов
/ 27 мая 2010

вот пример, который будет циклически перебирать таблицу и изменять подчеркивания и знаки процента

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...