Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改T-SQL中的SQL Server列名?_Sql_Sql Server_Tsql - Fatal编程技术网

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

如何更改T-SQL中的SQL Server列名?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个从CSV文件导入的600多个列的表,列名称中有特殊的字符%\。 有没有办法更改列名以删除这些特殊字符 代码可以是T-SQL。您可以使用这个吗 sp_RENAME 'Table.ColumnName%', 'NewColumnName' , 'COLUMN' ? 工作示例不确定sp_重命名中的[] CREATE TABLE foo ([Oh%Dear] int) EXEC sp_rename 'foo.[Oh%Dear]', 'OhDear', 'COLUMN' EXEC sys.s

我有一个从CSV文件导入的600多个列的表,列名称中有特殊的字符%\。 有没有办法更改列名以删除这些特殊字符

代码可以是T-SQL。

您可以使用这个吗

sp_RENAME 'Table.ColumnName%', 'NewColumnName' , 'COLUMN'
?

工作示例不确定sp_重命名中的[]

CREATE TABLE foo ([Oh%Dear] int)

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

EXEC sys.sp_help 'foo'

您可以查询信息\u SCHEMA.COLUMNS并生成sp\u重命名脚本来重命名这些列

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

这里有一个例子,它将在一个表上循环并更改下划线和百分号

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

我不知道tsql,但我想我知道tsql的答案。
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