How can I drop all indexes in a SQL database with one command?

前端 未结 7 1418
温柔的废话
温柔的废话 2021-02-04 00:01

So, how can I drop all indexes in a SQL database with one command? I have this command that will get me all the 20 or so drop statements, but how can I run all of those drop s

7条回答
  •  -上瘾入骨i
    2021-02-04 00:35

    SELECT  'DROP INDEX [' + IX.NAME + '] ON ' + OBJECT_NAME(IX.OBJECT_ID) + '; '
    FROM  SYS.INDEXES IX
      JOIN SYS.OBJECTS O ON  IX.OBJECT_ID = O.OBJECT_ID
      INNER JOIN SYS.SCHEMAS S ON O.SCHEMA_ID = S.SCHEMA_ID
    WHERE 
      IX.NAME IS NOT NULL 
      AND O.TYPE <> 'S' 
      AND IS_PRIMARY_KEY <> 1 
      AND INDEX_ID > 0
      AND S.NAME != 'SYS' AND S.NAME!= 'SYS' AND IS_UNIQUE_CONSTRAINT = 0
    

    Modify conditions according to your needs

    If u want to delete PK constraints, you will get this message if you try to drop index:

    An explicit DROP INDEX is not allowed on index... It is being used for PRIMARY KEY constraint enforcement.

    Then, use this...

    SELECT 'ALTER TABLE [' + O.NAME + '] DROP CONSTRAINT  ' + IX.NAME + '; '
    FROM  SYS.INDEXES IX
      JOIN SYS.OBJECTS O ON  IX.OBJECT_ID = O.OBJECT_ID
      INNER JOIN SYS.SCHEMAS S ON O.SCHEMA_ID = S.SCHEMA_ID
    WHERE 
      IX.NAME IS NOT NULL 
      AND O.TYPE <> 'S' 
      AND INDEX_ID > 0
      AND S.NAME != 'SYS' AND S.NAME!= 'SYS'
    

提交回复
热议问题