重复外键上的级联删除?那可能吗?

时间:2012-12-10 17:03:31

标签: sql-server key cascade cascading-deletes

我的MSSQL DB设计如下:

  

一张带有图片的桌子,image_id = PK一张带有视频的桌子,video_id   = PK一个带注释的表,comment_id = PK,以及两个唯一匹配父项的字段:item_id(等于image_id或   video_id)和item_type告诉我谁是父母(或者是   图片或视频)。

如何添加级联删除,以便在删除图像时自动删除与Images.image_id = Comments.item_id AND Comments.item_type = 'image'匹配的评论?如您所见,为了实现此功能,我必须同时指定项目类型和item_id,因为其他评论可以存在于同一item_id但具有不同item_type属性。

1 个答案:

答案 0 :(得分:1)

使用TRIGGER,这样您就可以添加必要的c.item_type = 'image'过滤器:

CREATE TRIGGER [dbo].[TrgImagesDelete] ON [dbo].[Images] FOR DELETE
AS
BEGIN
    DELETE c
    FROM
        Comments c
        JOIN Deleted d
            ON c.item_id = d.image_id
            AND c.item_type = 'image'
END
GO