小编Ger*_*old的帖子

循环或多个级联路径删除时设置为空:真的吗?

我问这个问题是为了检查我关于级联删除的推理是否正确,以及我是否没有忽略任何东西。我理解这种行为,我不是在问为什么在当前的限制下实施它。

当我们尝试创建一个包含像这样的自引用的表时:

CREATE TABLE [BlogComments] (
    [Id] int NOT NULL IDENTITY,
    [AuthorName] nvarchar(100) NULL,
    [Content] nvarchar(max) NULL,
    [CreatedTime] datetime2 NOT NULL,
    [ReplyToId] int NULL,
    CONSTRAINT [PK_BlogComments] PRIMARY KEY ([Id]),
    CONSTRAINT [FK_BlogComments_BlogComments_ReplyToId] FOREIGN KEY ([ReplyToId])
         REFERENCES [BlogComments] ([Id]) ON DELETE SET NULL -- Not: CASCADE
);
Run Code Online (Sandbox Code Playgroud)

我们得到了臭名昭著的异常

在表 'BlogComments' 上引入 FOREIGN KEY 约束 'FK_BlogComments_BlogComments_ReplyToId' 可能会导致循环或多个级联路径。

我知道该设置ON DELETE SET CASCADE实际上可能会导致删除的递归级联,因此可能很危险,或者充其量是耗时的。但ON DELETE SET NULL不同的是:它只会使ReplyToId直接子记录无效,而不会使它们的子记录无效。

那么我得出的结论是,当外键定义为 SQL Server 时,SQL Server 的限制性太强了ON DELETE SET NULL吗?或者我是否忽略了在这种特殊情况下进行此限制的一些充分理由? …

sql-server cascade

10
推荐指数
1
解决办法
3759
查看次数

标签 统计

cascade ×1

sql-server ×1