正在SQL Server中删除一组表

正在SQL Server中删除一组表,sql,sql-server,database,Sql,Sql Server,Database,有没有一种简单的方法可以在SQL Server中删除一组相互关联的表?理想情况下,我希望不必担心它们被放入的顺序,因为我知道整个组将在流程结束时消失。我没有访问SQL Server的权限来测试这一点,但是: DROP TABLE IF EXISTS table1, table2, table3 CASCADE; 我不确定德里克的方法是否有效。你还没有把它标为最佳答案 如果不是:我想,使用SQL Server 2005应该是可能的。 在那里,他们引入了异常(我还没有使用)。因此,如果出现异常,请

有没有一种简单的方法可以在SQL Server中删除一组相互关联的表?理想情况下,我希望不必担心它们被放入的顺序,因为我知道整个组将在流程结束时消失。

我没有访问SQL Server的权限来测试这一点,但是:

DROP TABLE IF EXISTS table1, table2, table3 CASCADE;

我不确定德里克的方法是否有效。你还没有把它标为最佳答案

如果不是:我想,使用SQL Server 2005应该是可能的。
在那里,他们引入了异常(我还没有使用)。因此,如果出现异常,请删除该表,捕获异常,然后尝试下一个表,直到它们全部消失。
如果愿意,您可以将表列表存储在临时表中,并使用光标遍历它。

我最终使用Apache来执行删除操作,这在我的情况下对其进行了排序,尽管只在sql server中工作的解决方案会简单一些

@德里克·帕克,我不知道你可以在那里用逗号分隔不同的桌子,所以这很方便,但它似乎不像预期的那样工作。sql server似乎能够识别“是否存在”或“是否级联”,并且运行
drop table X、Y、Z
似乎仅在应按规定顺序删除它们时才起作用


另请参见,其中描述了drop table语法。

阻止您以任何顺序删除表的是表之间的外键依赖关系。所以,在你开始之前,把FK除掉

  • 使用INFORMATION_SCHEMA系统视图,检索与这些表相关的所有外键的列表
  • 删除每个外键
  • 现在,您应该能够使用所需的任何顺序删除所有表

  • 一种不同的方法可能是:首先去掉约束,然后一次性删除表


    换句话说,每个约束都有一个删除约束,然后每个表都有一个删除表;在这一点上,执行顺序不应该是一个问题。

    冒着听起来愚蠢的风险,我不相信SQL Server支持delete/cascade语法。我认为您可以配置一个删除规则来执行级联删除(),但据我所知,SQL Server的诀窍是只对要删除的每个表运行一次删除查询,然后检查它是否工作。

    这需要sp\uuuuuuuu drop\uuu约束脚本,您可以在以下位置找到:

    注意很明显,如果要删除数据库中的所有表,请小心

    sp_MSforeachtable @command1="print 'disabling constraints: ?'", @command2="sp_drop_constraints @tablename=?"
    GO
    sp_MSforeachtable @command1="print 'dropping: ?'", @command2="DROP TABLE ?"
    GO