如何在除一个表之外的语句中从sql server 2005中的数据库中删除所有表

Man*_*ish 7 sql-server-2005

我正在使用sql-server 2005.最初,出于学习目的,我创建了许多表,现在我想删除所有那些表,除了当前我正在处理的表.是否有任何代码或查询可以从我的数据库中删除所有表,除了一个有用的表.我认为的一种方法是将该表复制到新的数据库使用SELECT INTO...子句并删除该数据库,但不知道这是解决此问题的好方法.

Mar*_*ith 7

如果表格不是很大,我可能只需在SSMS的"对象资源管理器详细信息"窗口中选择它们,然后点击删除.

对于您可以使用的程序化解决方案

EXEC sys.sp_MSforeachtable 
       N'IF OBJECT_ID(''?'') <> OBJECT_ID(''dbo.YourTableToKeep'')
             DROP TABLE ?
       '
Run Code Online (Sandbox Code Playgroud)

两种方法都可能需要重复运行才能删除FK关系中涉及的所有表(如果另一个表具有引用它的FK,则无法删除表).

  • 要详细说明UI解决方案:F7是对象资源管理器详细信息键盘快捷方式.您无法在对象资源管理器树视图中多选对象,但可以在树视图中选择"表"节点,然后按F7以显示"对象资源管理器详细信息". (3认同)

小智 6

您可以使用sql创建所需的所有drop staments.例如下一个sql查询

USE [MyDatabase];
GO
SELECT  
    replace(
        replace('DROP TABLE [{Schema}].[{TableName}];'
        ,'{Schema}',TABLE_SCHEMA)
        ,'{TableName}',TABLE_NAME) 
FROM 
    INFORMATION_SCHEMA.TABLES 
WHERE 
    TABLE_NAME NOT IN ('TableNameOne','TableNameTwo')
Run Code Online (Sandbox Code Playgroud)

并获得执行查询的结果.

复制查询的第一列并将其粘贴到新的查询窗口中.

人们很容易看到,你得到下降staments的列表除了"TableNameOne"和"TableNameTwo",所有表...

我觉得这很简单......