在SQL SERVER中批量修改字段名的办法!又是在CSDN查到的,哈哈

 

更正:应该是

select 'EXEC sp_rename '''+name+'.[老名]'','+ '''新名'',''COLUMN'''   from   sysobjects  a    where   type='U'
  and   exists(select   1   from   syscolumns   b   where   b.name='老名' and b.id=a.id )


在SQL SERVER中怎么批量修改字段名

楼主gslrq([夜归人]http://www.west998.com/) 2003-10-26 19:47:40 在 MS-SQL Server / 应用实例 提问

在SQL   SERVER   数据库中,有好多300多个表,想将多个表中字段名为“Number”的  
  字段名重命名,怎么作? 问题点数:0、回复次数:4Top

1 楼yone(yone)回复于 2003-10-26 20:11:48 得分 0

select   '   EXEC   sp_rename   '   +   name+'.[Number],'+   '''newname'',''COLUMN'''   from   sysobjects   where   type   ='U'  
   
  执行这段SQL,取返回记录,再在QUERY   ANALYZER中执行Top

2 楼yone(yone)回复于 2003-10-26 20:16:33 得分 0

补充以下在加一个条件  
   
  select   '   EXEC   sp_rename   '   +   name+'.[Number],'+   '''newname'',''COLUMN'''   from   sysobjects   a   where   type   ='U'    
  and   exist(select   1   from   syscolumns   b   where   b.name   ='Number'   and   b.id   =   a.id   )  
   
  执行这段SQL,取返回记录,再在QUERY   ANALYZER中执行  
  Top

3 楼pengdali()回复于 2003-10-26 21:25:13 得分 0

declare     cursor_insert   cursor   for   select   d.name   from   syscolumns   a,   sysobjects   d   where   a.id=d.id   and   d.xtype='U'   and   a.name=@旧列名  
  declare   @i   varchar(500)  
  open   cursor_insert  
  fetch   cursor_insert   into   @i  
  while   @@fetch_status=0  
  begin  
      set   @i=@i+'.'+@旧列名  
      exec   sp_rename   @i,@新列名  
      fetch   cursor_insert   into   @i  
  end  
  close   cursor_insert  
  deallocate   cursor_insertTop

4 楼pengdali()回复于 2003-10-26 21:25:40 得分 0

举例:  
   
   
   
  declare   @旧列名   varchar(500),@新列名   varchar(500)  
  select   @旧列名='Number',@新列名='新列名'  
   
   
   
   
  declare     cursor_insert   cursor   for   select   d.name   from   syscolumns   a,   sysobjects   d   where   a.id=d.id   and   d.xtype='U'   and   a.name=@旧列名  
  declare   @i   varchar(500)  
  open   cursor_insert  
  fetch   cursor_insert   into   @i  
  while   @@fetch_status=0  
  begin  
      set   @i=@i+'.'+@旧列名  
      exec   sp_rename   @i,@新列名  
      fetch   cursor_insert   into   @i  
  end  
  close   cursor_insert  
  deallocate   cursor_insert

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

--------------------------------------------

 

更正:应该是

select 'EXEC sp_rename '''+name+'.[老名]'','+ '''新名'',''COLUMN'''   from   sysobjects  a    where   type='U'
  and   exists(select   1   from   syscolumns   b   where   b.name='老名' and b.id=a.id )

 

 

 

---------------------------------------------

sqlserver 如何批量更改表名和字段名前缀?
进入用户个人空间
加为好友
发送私信
在线聊天
  • lvpin258
  • 等级:
  • 可用分等级:
  • 总技术分:
  • 总技术分排名:
  • 结帖率:
发表于:2009-01-18 17:20:18 楼主
sqlserver数据库,批量更改表名和字段的前缀,
如,现在有有若干表,ABC_admin,ABC_product,ABC_user,ABC_upload等,前缀都是ABC,
每个表里的字段名也是ABC开头,现在想把ABC改成EFG,如何能批量修改?
5  修改 删除 举报 引用 回复

进入用户个人空间
加为好友
发送私信
在线聊天
  • josy
  • 等级:
  • 可用分等级:
  • 总技术分:
  • 总技术分排名:
发表于:2009-01-18 17:24:371楼 得分:0
先从sysobjects表取出表名,再rename
修改 删除 举报 引用 回复

进入用户个人空间
加为好友
发送私信
在线聊天
  • lvpin258
  • 等级:
  • 可用分等级:
  • 总技术分:
  • 总技术分排名:
发表于:2009-01-18 17:27:212楼 得分:0
能不能具体点啊?
修改 删除 举报 引用 回复

进入用户个人空间
加为好友
发送私信
在线聊天
  • josy
  • 等级:
  • 可用分等级:
  • 总技术分:
  • 总技术分排名:
发表于:2009-01-18 18:05:243楼 得分:0
SQL code
           
           
select * from sysobjects where xtype = ' u ' and name like ' ABC_% '
-- 这样可以查出你要修改的表

sp_rename oldname,newname
-- 这样可以修改表名


看了一个以前邹老大给的例子


exec sp_msforeachtable
@command1 = '
declare @o sysname,@n sysname
select @o=
'' ? ''
,@n=stuff(@o,1,charindex(
'' ].[ABC_ '' ,@o)+6, '''' )
,@n=left(@n,len(@n)-1)
exec sp_rename @o,@n
' ,
@whereand = ' and o.name like '' ABC_% '''

修改 删除 举报 引用 回复

进入用户个人空间
加为好友
发送私信
在线聊天
  • fcuandy
  • 等级:
  • 可用分等级:
  • 总技术分:
  • 总技术分排名:
  • 3

发表于:2009-01-18 18:30:164楼 得分:0
SQL code
           
           
use test
go

create table abc_1(abc_id int )
create table abc_2(abc_xxid int )
create table abc_aaa(abc_dd int )
go

-- 修改列名
declare @s varchar ( 8000 )
select @s = isnull ( @s + char ( 10 ) , '' ) + ' exec sp_rename '' [ ' + b.name + ' ].[ ' + a.name + ' ] '' , ''' + stuff (a.name, 1 , 3 , ' def ' ) + ''' , '' column '''
from syscolumns a
inner join
(
select name,id from sysobjects where xtype = ' u ' and name like ' abc/_% ' escape ( ' / ' )
) b
on a.id = b.id
where a.name like ' abc/_% ' escape ( ' / ' )
exec ( @s )

/*
注意: 更改对象名的任一部分都可能破坏脚本和存储过程。
column 已重命名为 'def_id'。
注意: 更改对象名的任一部分都可能破坏脚本和存储过程。
column 已重命名为 'def_xxid'。
注意: 更改对象名的任一部分都可能破坏脚本和存储过程。
column 已重命名为 'def_dd'。
*/

-- 修改表名
exec sp_msForeachTable @command1 = N ' declare @s varchar(100);select @s=left(stuff( '' ? '' ,1,10, '' def '' ),len( '' ? '' )-8);exec sp_rename '' ? '' ,@s ' , @whereand = ' and name like '' abc/_% '' escape( '' / '' ) '
/*
注意: 更改对象名的任一部分都可能破坏脚本和存储过程。
object 已重命名为 'def_1'。
注意: 更改对象名的任一部分都可能破坏脚本和存储过程。
object 已重命名为 'def_2'。
注意: 更改对象名的任一部分都可能破坏脚本和存储过程。
object 已重命名为 'def_aaa'。

*/
go

drop table def_1,def_2,def_aaa
go

修改 删除 举报 引用 回复

进入用户个人空间
加为好友
发送私信
在线聊天
  • josy
  • 等级:
  • 可用分等级:
  • 总技术分:
  • 总技术分排名:
发表于:2009-01-18 18:38:125楼 得分:0
引用 3 楼 josy 的回复:
SQL codeselect * from sysobjects where xtype='u' and name like 'ABC_%'
--这样可以查出你要修改的表

sp_rename oldname,newname
--这样可以修改表名


看了一个以前邹老大给的例子


exec  sp_msforeachtable   
@command1='
  declare  @o  sysname,@n  sysname   
  select  @o=''?'' 
  ,@n=stuff(@o,1,charindex(''].[ABC_'',@o)+6,'''') 
  ,@n=left(@n,len(@n)-1) 
  exec  sp_renam…

看错了,以为是把ABC_去掉,ABC_改为EFG_参考下面语句
SQL code
           
           
exec sp_msforeachtable
@command1 = '
declare @o sysname,@n sysname
select @o=
'' ? ''
,@n=stuff(@o,1,charindex(
'' ].[ABC_ '' ,@o)+6, '' EFG_ '' )
,@n=left(@n,len(@n)-1)
exec sp_rename @o,@n
' ,
@whereand = ' and o.name like '' ABC_% '''

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值