鲲鹏

C# asp.net

导航

在SQL SERVER中批量修改字段名的办法!

Posted on 2009-07-17 16:27  昆鹏  阅读(2953)  评论(0编辑  收藏  举报

更正:应该是

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
该用户很懒,没有设置昵称
等级:
可用分等级:短工
总技术分:0
总技术分排名:337026
结帖率:0.00%

发表于:2009-01-18 17:20:18 楼主
sqlserver数据库,批量更改表名和字段的前缀,
如,现在有有若干表,ABC_admin,ABC_product,ABC_user,ABC_upload等,前缀都是ABC,
每个表里的字段名也是ABC开头,现在想把ABC改成EFG,如何能批量修改?
问题点数:5 回复次数:5 显示所有回复显示星级回复显示楼主回复 修改 删除 举报 引用 回复  

加为好友
发送私信
在线聊天
josy
百年树人
等级:
可用分等级:小地主
总技术分:11925
总技术分排名:1797

发表于:2009-01-18 17:24:371楼 得分:0
先从sysobjects表取出表名,再rename
修改 删除 举报 引用 回复  

加为好友
发送私信
在线聊天
lvpin258
该用户很懒,没有设置昵称
等级:
可用分等级:短工
总技术分:0
总技术分排名:337026

发表于:2009-01-18 17:27:212楼 得分:0
能不能具体点啊?
修改 删除 举报 引用 回复  

加为好友
发送私信
在线聊天
josy
百年树人
等级:
可用分等级:小地主
总技术分:11925
总技术分排名:1797

发表于: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
故乡的云
等级:
可用分等级:中农
总技术分:74409
总技术分排名:92
3
发表于:2009-01-18 18:30:164楼 得分:0
SQL code
use testgocreate 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 ainner 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'。*/godrop table def_1,def_2,def_aaago
修改 删除 举报 引用 回复  

加为好友
发送私信
在线聊天
josy
百年树人
等级:
可用分等级:小地主
总技术分:11925
总技术分排名:1797

发表于: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_%''' 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/skyremember/archive/2009/03/07/3965240.aspx