How to drop all tables from a database with one SQL query?

后端 未结 12 2077
盖世英雄少女心
盖世英雄少女心 2020-12-12 09:44

I don\'t want to type all tables\' name to drop all of them. Is it possible with one query?

12条回答
  •  攒了一身酷
    2020-12-12 09:59

    If anybody else had a problem with best answer's solution (including disabling foreign keys), here is another solution from me:

    -- CLEAN DB
    USE [DB_NAME]
        EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
        EXEC sp_MSForEachTable 'DELETE FROM ?'
    
        DECLARE @Sql NVARCHAR(500) DECLARE @Cursor CURSOR
        SET @Cursor = CURSOR FAST_FORWARD FOR
    
        SELECT DISTINCT sql = 'ALTER TABLE [' + tc2.TABLE_NAME + '] DROP [' + rc1.CONSTRAINT_NAME + ']'
        FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc1
        LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc2 ON tc2.CONSTRAINT_NAME =rc1.CONSTRAINT_NAME
        OPEN @Cursor FETCH NEXT FROM @Cursor INTO @Sql
        WHILE (@@FETCH_STATUS = 0)
          BEGIN
            Exec SP_EXECUTESQL @Sql
            FETCH NEXT 
            FROM @Cursor INTO @Sql
          END
        CLOSE @Cursor DEALLOCATE @Cursor
        GO
    
        EXEC sp_MSForEachTable 'DROP TABLE ?'
        GO
    
        EXEC sp_MSForEachTable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL'
    

提交回复
热议问题