加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

如何使用一个命令删除SQL数据库中的所有索引?

发布时间:2020-12-12 16:41:30 所属栏目:MsSql教程 来源:网络整理
导读:那么,如何使用一个命令删除SQL数据库中的所有索引?我有这个命令,将得到我所有的20个左右的drop语句,但是如何从这个“结果集”运行所有这些drop语句? select * from vw_drop_idnex; 给我相同列表的另一个变体是: SELECT 'DROP INDEX ' + ix.Name + ' ON ' +
那么,如何使用一个命令删除SQL数据库中的所有索引?我有这个命令,将得到我所有的20个左右的drop语句,但是如何从这个“结果集”运行所有这些drop语句?
select * from vw_drop_idnex;

给我相同列表的另一个变体是:

SELECT  'DROP INDEX ' + ix.Name + ' ON ' + OBJECT_NAME(ID)  AS QUERYLIST
FROM  sysindexes ix
WHERE   ix.Name IS NOT null and ix.Name like '%pre_%'

我试图做“exec(从vw_drop_idnex选择cmd)”,它没有工作.我正在寻找一种类似于for循环的东西,并逐个运行查询.

———————–

有了Rob Farleys的帮助,剧本的最终草案是:

declare @ltr nvarchar(1024);
SELECT @ltr = ( select 'alter table '+o.name+' drop constraint '+i.name+';'
  from sys.indexes i join sys.objects o on  i.object_id=o.object_id
  where o.type<>'S' and is_primary_key=1
  FOR xml path('') );
exec sp_executesql @ltr;

declare @qry nvarchar(1024);
select @qry = (select 'drop index '+o.name+'.'+i.name+';'
  from sys.indexes i join sys.objects o on  i.object_id=o.object_id
  where o.type<>'S' and is_primary_key<>1 and index_id>0
for xml path(''));
exec sp_executesql @qry

解决方法

你很近
declare @qry nvarchar(max);
select @qry = 
(SELECT  'DROP INDEX ' + ix.name + ' ON ' + OBJECT_NAME(ID) + '; '
FROM  sysindexes ix
WHERE   ix.Name IS NOT null and ix.Name like '%prefix_%'
for xml path(''));
exec sp_executesql @qry

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读