Sqlserver2008删除索引问题

因为用了syncnavigator这个工具导致数据库中每个表都增加了一个IDX_开头的索引以及增加了一列_MASK_FROM_V2现在请教如何批量删除所有表中IDX_开头... 因为用了syncnavigator这个工具导致数据库中每个表都增加了一个 IDX_ 开头的索引以及增加了一列 _MASK_FROM_V2
现在请教如何批量删除 所有表中 IDX_ 开头的索引,然后在批量删除所有表中 _MASK_FROM_V2 的这一列。
展开
 我来答
日落的糖Kf
2017-11-29 · TA获得超过4万个赞
知道大有可为答主
回答量:3400
采纳率:0%
帮助的人:546万
展开全部

请采用下列脚本





/*删除索引*/

declare @table table  (keyId int identity,name1 varchar(100),name2 varchar(100))

insert into @table(name1,name2)
 select object_name(object_id),name from sys.indexes where name like 'IDX%'  

declare @i    int 
declare @imax int 
declare @name1 varchar(100)
declare @name2 varchar(100)

set @i =1 
select @imax = max(keyId) from @table t 



while @i <=@imax
begin
set @name1 =''
set @name2 ='' 
select @name1  = name1,@name2=name2 from @table t where t.keyId =@i

print 'drop index ['+@name2 +'] on table ['+@name1+'] '
 ---exec  ('drop index '+@name2 +' on table '+@name1  )  
 
  
set @i =@i+1 
end



go


declare @table table(keyId int identity,name varchar(100))

insert into @table (name) select name from sys.tables where type='u'


/*修理表结构*/

declare @i    int 
declare @imax int 
declare @name varchar(100)

set @i =1 
select @imax = max(keyId) from @table t 



while @i <=@imax
begin
set @name =''
select @name  = name from @table t where t.keyId =@i

 

print 'alter table ['+@name +'] drop column [_MASK_FROM_V2]'
--exec ('alter table '+@name +' drop column [_MASK_FROM_V2]')
 
set @i =@i+1 
end

分两步操作

1 删除索引

2 修改表结构

有疑问及时沟通。

先在测试机上操作,请采纳!

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式