sqlserver 如何批量更改表名和字段名前缀?

lvpin258 2009-01-18 05:20:18
sqlserver数据库,批量更改表名和字段的前缀,
如,现在有有若干表,ABC_admin,ABC_product,ABC_user,ABC_upload等,前缀都是ABC,
每个表里的字段名也是ABC开头,现在想把ABC改成EFG,如何能批量修改?
...全文
1461 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
feifeiyiwen 2009-04-23
  • 打赏
  • 举报
回复
应该没有吧
jin20000 2009-04-23
  • 打赏
  • 举报
回复
那有没有连存储过程内容一起批量修改的?
百年树人 2009-01-18
  • 打赏
  • 举报
回复
[Quote=引用 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…
[/Quote]
看错了,以为是把ABC_去掉,ABC_改为EFG_参考下面语句
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_%'''
fcuandy 2009-01-18
  • 打赏
  • 举报
回复
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
百年树人 2009-01-18
  • 打赏
  • 举报
回复
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_%'''
lvpin258 2009-01-18
  • 打赏
  • 举报
回复
能不能具体点啊?
百年树人 2009-01-18
  • 打赏
  • 举报
回复
先从sysobjects表取出表名,再rename

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧