我正在使用asp.net和sql server。我有2个表:类别和产品。在产品表中,我将categoryId作为FK。我想要做的是:当我从类别表中删除类别时,我希望产品表中的所有产品都将被删除。怎么能这样做(我更喜欢商店程序,但它不是mandetory)?
答案 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
这将自动删除与该类别相关联的所有产品。