请问MSSQL数据库中怎么一起修改表名呢

时间:2022-06-01 20:34:47
我这边有个数据库有三十几个表,想全部前面加上"TB_"
应该怎么做呢。有十个左右表有涉及到存储过程

16 个解决方案

#1


一个一个改

#2


没有比较简单的方法吗

#3


只改表名的话用游标写个循环很容易实现,但是还要改相关的存储过程的话...

#4


用游标写个循环很容易实现

怎么实现啊,存储过程里面都是简单的啊,我修改一下就可以了

#5


use 库名
go
declare @tbname varchar(300),@i int 
declare @tb table(id int identity(1,1) primary key,name varchar(300))
insert into @tb select name from sysobjects where xtype='u'
set @i=1
while @i<=(select max(id) from @tb)
begin
select @tbname=name from @tb where id=@i
exec('sp_rename '''+@tbname+''',''TB_'+@tbname+''' ')
set @i=@i+1
end

#6


参考一下以前邹老大给的例子


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_%''' 

#7


这例子是把表的前缀“ABC_”去掉

#8


全部一下改啊,没试过哦

#9



exec sp_msforeachtable  '
declare @tbname sysname,@newtbname sysname
select @tbname=''?'',@newtbname=substring(@tbname,charindex(''].['',@tbname)+3,1000)
,@newtbname=''TB_''+left(@newtbname,len(@newtbname)-1)  
exec sp_rename @tbname,@newtbname
'

#10


谢谢各位

#11


按F1
搜索
sysobjects
sp_rename 

#12


MASTER.dbo.xp_execresultset 'SELECT ''exec sp_rename ''''''+NAME+'''''',''''TB_''+NAME+'''''''' from sysobjects WHERE xtype=''U''',N'表名'

#13


引用 12 楼 chuifengde 的回复:
SQL codeMASTER.dbo.xp_execresultset'SELECT''exec sp_rename''''''+NAME+'''''',''''TB_''+NAME+''''''''from sysobjects WHERE xtype=''U''',N' 表名'

最后那个应该是库名.

#14


对,不好意思

#15


引用 9 楼 perfectaction 的回复:
SQL codeexec sp_msforeachtable  '
declare @tbname sysname,@newtbname sysname
select @tbname=''?'',@newtbname=substring(@tbname,charindex(''].['',@tbname)+3,1000)
,@newtbname=''TB_''+left(@newtbname,len(@newtbname)-1)  
exec sp_rename @tbname,@newtbname
'

这么多大招,我就不发了。顺便学习

#16


5楼的兄弟,你的循环次数也太大了吧。

#1


一个一个改

#2


没有比较简单的方法吗

#3


只改表名的话用游标写个循环很容易实现,但是还要改相关的存储过程的话...

#4


用游标写个循环很容易实现

怎么实现啊,存储过程里面都是简单的啊,我修改一下就可以了

#5


use 库名
go
declare @tbname varchar(300),@i int 
declare @tb table(id int identity(1,1) primary key,name varchar(300))
insert into @tb select name from sysobjects where xtype='u'
set @i=1
while @i<=(select max(id) from @tb)
begin
select @tbname=name from @tb where id=@i
exec('sp_rename '''+@tbname+''',''TB_'+@tbname+''' ')
set @i=@i+1
end

#6


参考一下以前邹老大给的例子


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_%''' 

#7


这例子是把表的前缀“ABC_”去掉

#8


全部一下改啊,没试过哦

#9



exec sp_msforeachtable  '
declare @tbname sysname,@newtbname sysname
select @tbname=''?'',@newtbname=substring(@tbname,charindex(''].['',@tbname)+3,1000)
,@newtbname=''TB_''+left(@newtbname,len(@newtbname)-1)  
exec sp_rename @tbname,@newtbname
'

#10


谢谢各位

#11


按F1
搜索
sysobjects
sp_rename 

#12


MASTER.dbo.xp_execresultset 'SELECT ''exec sp_rename ''''''+NAME+'''''',''''TB_''+NAME+'''''''' from sysobjects WHERE xtype=''U''',N'表名'

#13


引用 12 楼 chuifengde 的回复:
SQL codeMASTER.dbo.xp_execresultset'SELECT''exec sp_rename''''''+NAME+'''''',''''TB_''+NAME+''''''''from sysobjects WHERE xtype=''U''',N' 表名'

最后那个应该是库名.

#14


对,不好意思

#15


引用 9 楼 perfectaction 的回复:
SQL codeexec sp_msforeachtable  '
declare @tbname sysname,@newtbname sysname
select @tbname=''?'',@newtbname=substring(@tbname,charindex(''].['',@tbname)+3,1000)
,@newtbname=''TB_''+left(@newtbname,len(@newtbname)-1)  
exec sp_rename @tbname,@newtbname
'

这么多大招,我就不发了。顺便学习

#16


5楼的兄弟,你的循环次数也太大了吧。