2008-08-11 57 views
5

是否有简单的方法在SQL Server中删除一组相互关联的表格?理想情况下,我想避免担心他们被拒绝的顺序,因为我知道在整个流程结束之前整个团队都将离开。在SQL Server中删除一组表格

回答

2

冒着听起来很愚蠢的风险,我不相信SQL Server支持删除/级联语法。我认为你可以配置一个删除规则来执行级联删除(http://msdn.microsoft.com/en-us/library/ms152507.aspx),但据我所知,SQL Server的诀窍就是对每个要删除的表执行一次drop drop查询,然后检查它是否正常工作。

0

我没有访问SQL Server,以测试这一点,但如何:

DROP TABLE IF EXISTS table1, table2, table3 CASCADE; 
0

我不知道,如果德里克的方法效果。您尚未将其标记为最佳答案。

如果不是这样:我猜,SQL Server 2005应该是可能的。
他们在那里引入了异常(我还没有用过)。因此,放下表格,捕捉异常,如果发生,并尝试下一个表格,直到它们全部消失。
如果需要,可以将表的列表存储在临时表中,并使用光标对其进行遍历。

0

我最终使用Apache的ddlutils来执行删除操作,在我的情况下对它进行了整理,尽管只能在sql server中工作的解决方案会比较简单一些。

@Derek Park,我不知道你可以用逗号隔开表格,所以这很方便,但它看起来并不像预期的那样工作。下界如果EXISTS和CASCADE都被sql server识别出来,并且运行drop table X, Y, Z似乎只在它们应该按照所述顺序被丢弃时才起作用。

另请参阅http://msdn.microsoft.com/en-us/library/ms173790.aspx,其中描述了drop table语法。

0

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

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

一种不同的方法可能是:首先摆脱约束条件,然后将这些表格放在一个镜头中。

换句话说,每个约束的DROP CONSTRAINT,然后是每个表的DROP TABLE;此时执行顺序不应该成为问题。

1

这需要sp___drop___constraints脚本,你可以找到Database Journal

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

注意这一点 - 很明显 - 如果你的意思是放弃所有的表在数据库中,所以要小心