同时从2个表中删除?

时间:2009-10-02 14:43:19

标签: asp.net sql-server stored-procedures

我正在使用asp.net和sql server。我有2个表:类别和产品。在产品表中,我将categoryId作为FK。我想要做的是:当我从类别表中删除类别时,我希望产品表中的所有产品都将被删除。怎么能这样做(我更喜欢商店程序,但它不是mandetory)?

6 个答案:

答案 0 :(得分:2)

您可以定义FK以使用DELETES CASCADE。否则,您需要先删除该类别中的所有产品,然后删除该类别。

答案 1 :(得分:2)

如果您可以调整架构,SQL Server支持cascading deletes。使用这样的FK约束,只需对该类别进行一次删除即可获得此效果。并不是每个人都喜欢级联删除,请注意!

答案 2 :(得分:1)

@categoryid进入存储过程

delete from products where  categoryid = @categoryid
delete from categories where categoryid = @categoryid

答案 3 :(得分:1)

有很多方法可以做到这一点。我会在SQL中的外键约束上设置删除“Cascade”。让SQL为你管理,这是它擅长的。

答案 4 :(得分:1)

如果你想用存储过程

delete from Categories where categoryId=@categoryId 
delete from Products where categoryId = @categoryId

如果这种情况总是发生.ie如果你从Categories表中删除了某些内容,它应该从Products中删除。我的选择是DELETE CASCADE.something like this

ALTER TABLE dbo.Products   
WITH CHECK ADD  CONSTRAINT FK_Products_Categories FOREIGN KEY([categoryId])
REFERENCES dbo.Categories([categoryId])
ON DELETE CASCADE

所以当你从Categories表中删除时,它会自动从Products表中删除

例如:delete from dbo.Categories where categoryId =@categoryId

   no use of writing 

   delete from Products where categoryId = @categoryId

答案 5 :(得分:0)

您可以通过在数据库的“Diagrams”部分(假设MS SQL 2005/2008)或屏幕顶部的关系按钮(SQL 2000)中创建表之间的关系来实现此目的。

一旦使用级联删除创建了一对多关系,查询就可以简单:

delete from Categories where CategoryId = XX

这将自动删除与该类别相关联的所有产品。