是否有一种简单的方法可以在SQL Server中删除一组相互关联的表?理想情况下,我想避免担心他们被放弃的顺序,因为我知道整个小组将在整个过程结束时消失。
答案 0 :(得分:3)
冒着听起来很愚蠢的风险,我不相信SQL Server支持删除/级联语法。我认为您可以配置删除规则来执行级联删除(http://msdn.microsoft.com/en-us/library/ms152507.aspx),但据我所知,SQL Server的技巧只是为您要删除的每个表运行一次drop查询,然后检查它奏效了。
答案 1 :(得分:1)
不同的方法可能是:首先摆脱约束,然后一次性丢弃表格。
换句话说,每个约束都有一个DROP CONSTRAINT,然后是每个表的DROP TABLE;在这一点上,执行顺序不应成为问题。
答案 2 :(得分: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
注意这显然 - 如果您打算删除数据库中的所有表,请小心
答案 3 :(得分:0)
我无法访问SQL Server来测试它,但是如何:
DROP TABLE IF EXISTS table1, table2, table3 CASCADE;
答案 4 :(得分:0)
我不确定,如果Derek的方法有效。您尚未将其标记为最佳答案。
如果没有:我想,对于SQL Server 2005应该是可能的 他们在那里引入了例外(我还没有使用过)。所以放下桌子,抓住异常,如果有人出现并尝试下一张桌子,直到它们全部消失为止 如果需要,可以将表列表存储在临时表中,并使用光标遍历它。
答案 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。