【问题标题】:Delete cascade across junction tables跨联表删除级联
【发布时间】:2013-07-29 20:10:14
【问题描述】:

我目前有 3 个表定义为

Product = ProductID, ProductTitle, ProductStatus
Category = CategoryID, CategoryTitle
ProductInCategory = ProductID, CategoryID

ProductInCategory.ProductIDProduct.ProductID 的 FK,ProductInCategory.CategoryIDCategory.CategoryID 的 FK。

目前,如果删除产品或类别,则 on delete 级联会删除关系,我将如何让这个级联然后跨联表移动? IE。如果我删除一个类别,请通过联结表删除与该类别关联的所有产品而不自己手动删除每个产品。

【问题讨论】:

  • 当然,如果这是一个真正的联结表(多对多),您不想“删除与该类别关联的所有产品” - 您可能只想删除那些不再与 any 类别相关联的产品?

标签: sql sql-server tsql


【解决方案1】:

也许 ProductInCategory 表上的触发器会起作用:

DROP TRIGGER remove_products
GO
CREATE TRIGGER remove_products
ON ProductInCategory
FOR DELETE
AS 
DELETE FROM Product WHERE ProductID IN (SELECT ProductID FROM deleted);
GO

由于删除已经从 Category 级联到 ProductInCategory,因此此触发器也应该删除关联的产品。我假设您不想在从 Product 表中删除类别时删除类别。

【讨论】:

    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2010-10-05
    相关资源
    最近更新 更多