如何批量修改查询出来的表的字段名

时间:2022-09-25 00:38:12
现在我通过存储过程语句查询出一个表,但是这个表一些字段名是一些编码,而且在另一个表中这些编码值都有一一对应一个名称。我现在的需求就是能否批量直接将查询出来这些字段名为编码的改为对应的名称,这样查询出来的就是名称的表了。
求论坛达人能帮帮我,万分感谢!!

13 个解决方案

#1


直接关联查询就好了吧。

#2


declare @sql varchar(max)
set @sql=''
select  @sql=@sql+'EXEC sp_rename  '  '''a.name''' +',' + '''b.字段名''' +'COLUMN' from syscolumns as a inner join tb2 as b on  a.编码=b.编码 where a.id=object_id('tb') 

exec(@sql)

#3


没怎么看懂,我再说下我具体情况吧
比如有个表名叫tb1,然后字段名分别为1,2,3,4
另一个表名叫tb2,.然后字段名为编码和名称,并且编码值为1,2,3,4;名称值为上海,北京,南京,广州
现在就是要把tb1的字段名批量改为上海,北京,南京,广州
麻烦您再看下这个具体怎么写?

#4


其实就是根据  SYSCOLUMNS表查询出 TB1所有的字段 

然后与TB2关联

然后用sp_rename  这个存储过程来重新命名。

我用的是动态拼接 因为没有环境 所以就大概写了下,你可以自己去拼一下语句。

#5


declare @sql varchar(100)
set @sql=''
select  @sql=@sql+'exec sp_rename '+'''a.name''' +',' + '''b.name''' +','+'''COLUMN'''+' from syscolumns a inner join Table_2 as b on  a.name=b.code where a.id=object_id('+'''Table_1'''+')'
exec(@sql) 

我改成上面的,还是会提示from有语法错误

#6


declare @sql varchar(100)
set @sql=''
select  @sql=@sql+'EXEC sp_rename ' '''a.name''' +',' + '''b.name''' +','+'''COLUMN''' from syscolumns a inner join Table_2 as b on  a.name=b.code where a.id=object_id('Table_1')
exec(@sql) 


这样也有语法错误
第 3 行: ''a.name'' 附近有语法错误

#7


引用 2 楼 fredrickhu 的回复:
declare @sql varchar(max)
set @sql=''
select  @sql=@sql+'EXEC sp_rename  '  '''a.name''' +',' + '''b.字段名''' +'COLUMN' from syscolumns as a inner join tb2 as b on  a.编码=b.编码 where a.id=object_id('tb') 

exec(@sql)



这里面后来我看看改成
EXEC sp_rename 'a.name','b.name','COLUMN' 
from syscolumns a inner join T1 as b on  a.name=b.code where a.id=object_id('T2')

提示 from语法错误

#8


你这样肯定做啊,被F大看见扁到死~~

话说,你是要查询的时候显示的列名, 还是就是要直接对列重命名了~

#9


试试这个

declare @sql varchar(100)
set @sql=''
select  @sql=@sql+'EXEC sp_rename '''+a.name+''','''+b.name+''',''COLUMN''' 
from syscolumns a inner join T1 as b on  a.name=b.code where a.id=object_id('T2')

#10


引用 8 楼 ky_min 的回复:
你这样肯定做啊,被F大看见扁到死~~

话说,你是要查询的时候显示的列名, 还是就是要直接对列重命名了~


他是重命名 要是显示的话就简单了。所以需要SP_RENAME

要么就先查询出来 然后DROP 掉 然后统一添加。

#11


引用 10 楼 fredrickhu 的回复:
他是重命名 要是显示的话就简单了。所以需要SP_RENAME

要么就先查询出来 然后DROP 掉 然后统一添加。


哦,我看见

将查询出来这些字段名为编码的改为对应的名称

以为是要作为列别名

#12


好了 帮你写了个例子

--建表
create table tb1
([code] varchar(max))

create table tb2
(code1 varchar(max),
 name varchar(100)
)
--插入数据
insert into tb2 select 'code','上海'

--select * from tb2


declare @sql varchar(1000)
set @sql=''
select @sql=@sql+'EXEC sp_rename ''tb1.'+a.name+''','''+b.name+''',''COLUMN''' 
from syscolumns a inner join Tb2 as b on  a.name=b.code1 where a.id=object_id('Tb1')

--print @sql

--EXEC sp_rename 'tb1.code','上海','COLUMN'
exec (@sql)



--检查是否更改
select name from  syscolumns a where id=object_id('Tb1')
/*
name
--------------------------------------------------------------------------------------------------------------------------------
上海*/

drop table tb1,tb2

#13


引用 12 楼 fredrickhu 的回复:
好了 帮你写了个例子

--建表
create table tb1
([code] varchar(max))

create table tb2
(code1 varchar(max),
 name varchar(100)
)
--插入数据
insert into tb2 select 'code','上海'

--select * from tb2


declare @sql varchar(1000)
set @sql=''
select @sql=@sql+'EXEC sp_rename ''tb1.'+a.name+''','''+b.name+''',''COLUMN''' 
from syscolumns a inner join Tb2 as b on  a.name=b.code1 where a.id=object_id('Tb1')

--print @sql

--EXEC sp_rename 'tb1.code','上海','COLUMN'
exec (@sql)



--检查是否更改
select name from  syscolumns a where id=object_id('Tb1')
/*
name
--------------------------------------------------------------------------------------------------------------------------------
上海*/

drop table tb1,tb2


太给力了,谢谢啊,我是初学者,请多多指教了

#1


直接关联查询就好了吧。

#2


declare @sql varchar(max)
set @sql=''
select  @sql=@sql+'EXEC sp_rename  '  '''a.name''' +',' + '''b.字段名''' +'COLUMN' from syscolumns as a inner join tb2 as b on  a.编码=b.编码 where a.id=object_id('tb') 

exec(@sql)

#3


没怎么看懂,我再说下我具体情况吧
比如有个表名叫tb1,然后字段名分别为1,2,3,4
另一个表名叫tb2,.然后字段名为编码和名称,并且编码值为1,2,3,4;名称值为上海,北京,南京,广州
现在就是要把tb1的字段名批量改为上海,北京,南京,广州
麻烦您再看下这个具体怎么写?

#4


其实就是根据  SYSCOLUMNS表查询出 TB1所有的字段 

然后与TB2关联

然后用sp_rename  这个存储过程来重新命名。

我用的是动态拼接 因为没有环境 所以就大概写了下,你可以自己去拼一下语句。

#5


declare @sql varchar(100)
set @sql=''
select  @sql=@sql+'exec sp_rename '+'''a.name''' +',' + '''b.name''' +','+'''COLUMN'''+' from syscolumns a inner join Table_2 as b on  a.name=b.code where a.id=object_id('+'''Table_1'''+')'
exec(@sql) 

我改成上面的,还是会提示from有语法错误

#6


declare @sql varchar(100)
set @sql=''
select  @sql=@sql+'EXEC sp_rename ' '''a.name''' +',' + '''b.name''' +','+'''COLUMN''' from syscolumns a inner join Table_2 as b on  a.name=b.code where a.id=object_id('Table_1')
exec(@sql) 


这样也有语法错误
第 3 行: ''a.name'' 附近有语法错误

#7


引用 2 楼 fredrickhu 的回复:
declare @sql varchar(max)
set @sql=''
select  @sql=@sql+'EXEC sp_rename  '  '''a.name''' +',' + '''b.字段名''' +'COLUMN' from syscolumns as a inner join tb2 as b on  a.编码=b.编码 where a.id=object_id('tb') 

exec(@sql)



这里面后来我看看改成
EXEC sp_rename 'a.name','b.name','COLUMN' 
from syscolumns a inner join T1 as b on  a.name=b.code where a.id=object_id('T2')

提示 from语法错误

#8


你这样肯定做啊,被F大看见扁到死~~

话说,你是要查询的时候显示的列名, 还是就是要直接对列重命名了~

#9


试试这个

declare @sql varchar(100)
set @sql=''
select  @sql=@sql+'EXEC sp_rename '''+a.name+''','''+b.name+''',''COLUMN''' 
from syscolumns a inner join T1 as b on  a.name=b.code where a.id=object_id('T2')

#10


引用 8 楼 ky_min 的回复:
你这样肯定做啊,被F大看见扁到死~~

话说,你是要查询的时候显示的列名, 还是就是要直接对列重命名了~


他是重命名 要是显示的话就简单了。所以需要SP_RENAME

要么就先查询出来 然后DROP 掉 然后统一添加。

#11


引用 10 楼 fredrickhu 的回复:
他是重命名 要是显示的话就简单了。所以需要SP_RENAME

要么就先查询出来 然后DROP 掉 然后统一添加。


哦,我看见

将查询出来这些字段名为编码的改为对应的名称

以为是要作为列别名

#12


好了 帮你写了个例子

--建表
create table tb1
([code] varchar(max))

create table tb2
(code1 varchar(max),
 name varchar(100)
)
--插入数据
insert into tb2 select 'code','上海'

--select * from tb2


declare @sql varchar(1000)
set @sql=''
select @sql=@sql+'EXEC sp_rename ''tb1.'+a.name+''','''+b.name+''',''COLUMN''' 
from syscolumns a inner join Tb2 as b on  a.name=b.code1 where a.id=object_id('Tb1')

--print @sql

--EXEC sp_rename 'tb1.code','上海','COLUMN'
exec (@sql)



--检查是否更改
select name from  syscolumns a where id=object_id('Tb1')
/*
name
--------------------------------------------------------------------------------------------------------------------------------
上海*/

drop table tb1,tb2

#13


引用 12 楼 fredrickhu 的回复:
好了 帮你写了个例子

--建表
create table tb1
([code] varchar(max))

create table tb2
(code1 varchar(max),
 name varchar(100)
)
--插入数据
insert into tb2 select 'code','上海'

--select * from tb2


declare @sql varchar(1000)
set @sql=''
select @sql=@sql+'EXEC sp_rename ''tb1.'+a.name+''','''+b.name+''',''COLUMN''' 
from syscolumns a inner join Tb2 as b on  a.name=b.code1 where a.id=object_id('Tb1')

--print @sql

--EXEC sp_rename 'tb1.code','上海','COLUMN'
exec (@sql)



--检查是否更改
select name from  syscolumns a where id=object_id('Tb1')
/*
name
--------------------------------------------------------------------------------------------------------------------------------
上海*/

drop table tb1,tb2


太给力了,谢谢啊,我是初学者,请多多指教了