我正在为QA sql server数据库构建一个小的db-cleaner应用程序。当然,我需要删除具有依赖关系的表行。
T-SQL级联功能非常有限,所以我尝试使用NHibernate来简化问题。但是,我找到的唯一方法是为每个依赖项创建一个集合 在object-to-delete中,并将其标记为cascade = delete。
这意味着创建许多很多集合(在hbm文件和C#对象中),我不需要用于任何其他目的。这使得这个方法像使用SQL一样复杂。
我错过了什么吗?是否有更简单,更通用的方法来执行delete-cascade?
感谢。
编辑:为了清楚起见,我避免更改数据库中的外键,因为它是一个QA数据库,设计与生产数据库相同。
答案 0 :(得分:0)
最终我找到了一种删除的通用方法:
这个人写了一个递归SP,为你完成所有工作:
http://www.sqlteam.com/article/performing-a-cascade-delete-in-sql-server-7
需要一些修饰(因为我的数据库使用模式),但工作就像一个魅力。
答案 1 :(得分:0)
我想你在数据库中的相关表之间定义了外键? 您可以在外键级别指定在删除父记录时相关记录应该发生什么 查看MSDN的级联选项,以及如何定义它们: