回答

收藏

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

技术问答 技术问答 307 人阅读 | 0 人回复 | 2023-09-14

那么,如何用一个命令删除SQL数据库中的所有索引?我有此命令可以使我获得全部20条左右的drop语句,但是如何从此“结果集”运行所有这些drop语句?
3 r+ w& ~( X6 n& g" E* |0 a% E; S$ X$ ?3 Gselect * from vw_drop_idnex;
# d, h9 V  ~" ?& E) H- L2 M2 ~; Z给我相同列表的另一个变体是:0 w1 r. w' \  ]% y2 M# L, \9 f- l
SELECT  'DROP INDEX ' + ix.Name + ' ON ' + OBJECT_NAME(ID)  AS QUERYLIST
8 L1 j1 ^% ~6 B3 F2 [$ `FROM  sysindexes ix
3 {# N: D2 w! Q+ N0 j2 SWHERE   ix.Name IS NOT null and ix.Name like '%pre_%'* I8 l( [  g4 B3 q' f& x
我试图做“ exec(从vw_drop_idnex中选择cmd)”,但是它没有用。我正在寻找一种类似于for循环并逐一运行查询的东西。
0 j8 F( s7 S) L2 p-----------------------
5 M0 \1 D4 ?8 e& }  y" m; X" ?在Rob Farleys的帮助下,脚本的最终草案为:, `( w/ b6 q7 c' k* v
declare @ltr nvarchar(1024);/ S" f; s3 G3 p4 e
SELECT @ltr = ( select 'alter table '+o.name+' drop constraint '+i.name+';'
+ N) m; S9 m# t) w& J+ [3 S8 m  from sys.indexes i join sys.objects o on  i.object_id=o.object_id
, q! h) N$ `1 r5 ]  where o.type'S' and is_primary_key=1- b$ ^( n5 z' o# t5 [# T
  FOR xml path('') );8 Z; P" c: y+ s
exec sp_executesql @ltr;; Q4 w5 z3 I1 `+ b9 f2 h
declare @qry nvarchar(1024);
: o" {( u  n+ P: \5 F$ Kselect @qry = (select 'drop index '+o.name+'.'+i.name+';'" Z- A+ l5 c/ ?: }, w& M- T
  from sys.indexes i join sys.objects o on  i.object_id=o.object_id6 C( h. k3 }1 w( S6 `( R& q
  where o.type'S' and is_primary_key1 and index_id>0( b8 U/ \* ~' S( X+ S6 ~5 n) N
for xml path(''));
- j. S. }$ y3 s7 ^, ^) hexec sp_executesql @qry
6 b) X4 o/ Q! M  _! e( h- [8 s               
, E" g8 i, p7 N- X0 }) _* N5 o解决方案:
" O" ~' h# [/ ^' C* I' f                4 L5 n; P: W1 E$ x3 E
5 m) @9 m. _. Q
+ y* M5 y. T' ?8 _+ _
                你很亲密
) _& Y/ b  p4 h9 g: [3 sdeclare @qry nvarchar(max);
9 C9 \( X9 L" O" |: p1 W7 i4 X. qselect @qry = 9 B  q, B5 |+ y& u
(SELECT  'DROP INDEX [' + ix.name + '] ON ' + OBJECT_NAME(ID) + '; '
& N9 R- N* N" X' P( hFROM  sysindexes ix
' `" a3 k) v% k! c- ^  NWHERE   ix.Name IS NOT null and ix.Name like '%prefix_%'/ _5 J: t! q9 Q; o1 g7 c: c5 Y2 q0 P' a
for xml path(''));$ [0 G7 v9 q6 v/ O2 |0 r
exec sp_executesql @qry
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则