删除除少数几个SQL Server数据库中的所有表

时间:2016-08-02 12:15:35

标签: sql sql-server database sql-server-2008

我的数据库中有大约50多个表现在我想要的是删除数据库中的所有表,除了少数。

现在我所知道的是sys.tables是一个列出所有表的表,所以最初我运行了这样的查询

delete from sys.tables where name like '%DynamicSurgery' (or any other condition)
认为它可能有效。但正如我所料,它会抛出一个错误

  

不允许对系统目录进行临时更新。

请告诉我是否有办法删除SQL Server中的倍数?

3 个答案:

答案 0 :(得分:13)

您可以使用动态查询DROP所需的表格:

DECLARE @ExecSQL AS NVARCHAR (MAX) = '';

SELECT @ExecSQL = @ExecSQL + 
    'DROP TABLE ' + QUOTENAME(S.name) + '.' + QUOTENAME(T.name) + '; ' 
FROM sys.tables T
JOIN sys.schemas S ON S.schema_id = T.schema_id
WHERE T.name LIKE '%DynamicSurgery'

--PRINT @ExecSQL
EXEC (@ExecSQL)

答案 1 :(得分:0)

            EXEC sys.sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL';

            EXEC sp_MSforeachtable 'IF OBJECT_ID(''?'') NOT IN (
                  ISNULL(OBJECT_ID(''[dbo].[Table1]''),0),
                  ISNULL(OBJECT_ID(''[dbo].[Table2]''),0)
                  )
            DELETE FROM ?';

            EXEC sys.sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL';

答案 2 :(得分:-5)

  1. 点击选择表格
  2. 按删除按钮并按Enter键。 请注意:如果存在任何依赖项(外键),则不会删除该表