在SQL Server中删除一组表

时间:2008-08-11 04:32:01

标签: sql sql-server database

是否有一种简单的方法可以在SQL Server中删除一组相互关联的表?理想情况下,我想避免担心他们被放弃的顺序,因为我知道整个小组将在整个过程结束时消失。

7 个答案:

答案 0 :(得分:3)

冒着听起来很愚蠢的风险,我不相信SQL Server支持删除/级联语法。我认为您可以配置删除规则来执行级联删除(http://msdn.microsoft.com/en-us/library/ms152507.aspx),但据我所知,SQL Server的技巧只是为您要删除的每个表运行一次drop查询,然后检查它奏效了。

答案 1 :(得分:1)

这需要您在Database Journal找到的 sp ___ drop ___ constraints 脚本:

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

注意这显然 - 如果您打算删除数据库中的所有表,请小心

答案 2 :(得分:1)

不同的方法可能是:首先摆脱约束,然后一次性丢弃表格。

换句话说,每个约束都有一个DROP CONSTRAINT,然后是每个表的DROP TABLE;在这一点上,执行顺序不应成为问题。

答案 3 :(得分:0)

我不确定,如果Derek的方法有效。您尚未将其标记为最佳答案。

如果没有:我想,对于SQL Server 2005应该是可能的 他们在那里引入了例外(我还没有使用过)。所以放下桌子,抓住异常,如果有人出现并尝试下一张桌子,直到它们全部消失为止 如果需要,可以将表列表存储在临时表中,并使用光标遍历它。

答案 4 :(得分:0)

我无法访问SQL Server来测试它,但是如何:

DROP TABLE IF EXISTS table1, table2, table3 CASCADE;

答案 5 :(得分:0)

我最终使用Apache的ddlutils为我执行删除操作,在我的情况下对其进行了解决,尽管只在sql server中工作的解决方案会更加简单。

@Derek Park,我不知道你可以在那里用逗号分隔表,所以这很方便,但它看起来并不像预期的那样。看起来,这似乎是由sql服务器识别的,并且运行drop table X, Y, Z似乎只有在按照规定的顺序删除时才会起作用。

另请参阅http://msdn.microsoft.com/en-us/library/ms173790.aspx,其中介绍了删除表语法。

答案 6 :(得分:0)

阻止你以任何顺序删除表的事情是表之间的外键依赖关系。所以在你开始之前摆脱FK。

  1. 使用INFORMATION_SCHEMA系统视图,检索与任何这些表相关的所有外键的列表
  2. 删除这些外键
  3. 现在,您应该能够使用您想要的任何订单删除所有表格。