Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Datalist C从SQL Server 2008中删除多个表#_C#_Sql_Multiple Tables - Fatal编程技术网

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
,如果这样做有意义的话。