2012-03-07 41 views
2

这似乎是一个常见问题,但我用Google搜索以找到正确的答案,可以解决我的问题,但未能这样做。使用Datalist C从SQL Server 2008删除多个表#

我有多个表相互连接ProductID,我希望从主表中删除产品时删除它们的所有数据。即

产品ProductID - Vender - Description

ProductRatingsProductID - Rating - VisitorsCount

ProductCommentsProductID - VisitorName - Comment

我读到了这样的情况一个SQL触发器使用,但我不知道它的想法除此之外,在某些情况下,我可能会在ASCX.CS文件中提及我的DataSource,并且在某些情况下我可能会简单地使用它SqlDatasoruce在ASCX文件中。有没有可以使用的查询或存储过程?

回答

4

最简单的方法是实现与ProductID的外键关系并设置on delete cascade。这是一个总体思路:

create table ProductRatings 
(
    ProductID int not null 
     foreign key references Products(ProductID) on delete cascade, 
    Rating int not null, 
    VisitorsCount int not null 
) 

,当你删除了Products表的主键的值,这导致SQL Server删除有外键约束到主键值的所有记录什么,做的。如果您也使用ProductComments表进行此操作,则问题已解决。不需要在引用表中的任何记录上显式调用DELETE

如果你不使用参照完整性...你应该。

编辑:这也适用于主键上的UPDATE。您只需指定on update cascade,并且外键引用将作为主键更新以确保RI。

+1

对于数据一致性来说,这比尝试实现一堆触发器要好得多。它还鼓励开发人员在数据库中建立适当的外键关系。 – NotMe 2012-03-07 17:25:24

+0

同意@ChrisLively。事实上,我甚至会说触发器应该永远是最后的手段。他们经常会造成比解决问题更多的问题。 – JamieSee 2012-03-07 17:42:35

+0

非常感谢Shark,你不仅解决了这个问题,而且给了我很好的知识,在将来也会非常有用......我希望同样可以使用Insert和Update。 – 2012-03-07 17:49:05