C# 使用Datalist C从SQL Server 2008中删除多个表#
这似乎是一个常见的问题,但我通过谷歌搜索找到了可以解决我问题的正确答案,但没有找到 我有多个表通过C# 使用Datalist C从SQL Server 2008中删除多个表#,c#,sql,multiple-tables,C#,Sql,Multiple Tables,这似乎是一个常见的问题,但我通过谷歌搜索找到了可以解决我问题的正确答案,但没有找到 我有多个表通过ProductID相互连接,我希望在删除主表中的产品时从这些表中删除所有数据。i、 e 产品:ProductID-供应商-描述 产品评级:ProductID-评级-访问者搜索 ProductComments:ProductID-VisitorName-Comment 我了解到在这种情况下会使用SQL触发器,但我对此一无所知。此外,在某些情况下,我可能会在ASCX.CS文件中提到我的数据源,在某些情况
ProductID
相互连接,我希望在删除主表中的产品时从这些表中删除所有数据。i、 e
产品:ProductID-供应商-描述
产品评级:ProductID-评级-访问者搜索
ProductComments:ProductID-VisitorName-Comment
我了解到在这种情况下会使用SQL触发器,但我对此一无所知。此外,在某些情况下,我可能会在ASCX.CS文件中提到我的数据源,在某些情况下,我可能只是在ASCX文件中使用SqlDatasoruce
。是否可以使用任何查询或存储过程?最简单的方法是实现与ProductID
的外键关系,并在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
s。您只需在更新级联上指定,外键引用将像主键一样更新以确保RI。最简单的方法是实现与ProductID
的外键关系,并在删除级联上设置。这是一个总体思路:
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
s。您只需要在更新级联中指定,外键引用将像主键一样更新,以确保RI。对于数据一致性,这比尝试实现一系列触发器要好得多。它还鼓励开发人员在数据库中设置适当的外键关系。事实上,我甚至可以说触发器应该永远是最后的手段。他们经常造成的问题比他们解决的要多。非常感谢Shark,你们不仅解决了这个问题,而且给了我很多知识,这些知识在将来也会非常有用。。。。我希望插入和更新也能起到同样的作用。@AliKhan请参阅我的编辑。它也适用于UPDATE
s,但是INSERT
s将明确需要在引用表中插入INSERT
,如果这有意义的话。为了数据一致性,这比尝试实现一组触发器要好得多。它还鼓励开发人员在数据库中设置适当的外键关系。事实上,我甚至可以说触发器应该永远是最后的手段。他们经常造成的问题比他们解决的要多。非常感谢Shark,你们不仅解决了这个问题,而且给了我很多知识,这些知识在将来也会非常有用。。。。我希望插入和更新也能起到同样的作用。@AliKhan请参阅我的编辑。它也适用于UPDATE
s,但是INSERT
s将明确需要在引用表中插入INSERT
,如果这样做有意义的话。