【问题标题】:sql server 2008 foreign key on delete set default not workingsql server 2008外键删除设置默认不起作用
【发布时间】:2012-11-16 15:24:16
【问题描述】:

我正在测试删除选项的不同外键。我累了级联,没有动作,设置为空,所有的作品,除了设置默认值。 SQL SERVER 只报错:

消息 547,第 16 级,状态 0,第 1 行 DELETE 语句与 FOREIGN KEY 约束“FK_child_parent”冲突。冲突发生在数据库“Test”、表“dbo.Test_parent”、列“no”中。 声明已终止。

create table Test_parent(
    [no] int primary key    
)

CREATE TABLE test_child(
     SUB1 INT,
    [NO] int DEFAULT 0 CONSTRAINT FK_child_parent REFERENCES Test_parent([no]) ON DELETE set default
)

insert into Test_parent values(1),(2)

insert into test_child values(1, 1)
insert into test_child values(2, 1)

delete from Test_parent

【问题讨论】:

    标签: sql-server-2008-r2


    【解决方案1】:

    您删除了父表,这会触发子表中的设置默认值。数据库尝试将子记录设置为其默认的0。但是父表中没有0记录,触发外键违规。

    【讨论】:

    • 那么设置默认值有什么意义呢?我认为它会像 set null 一样,但会将列设置为某个默认值。你能举一个设置默认值有意义的例子吗?
    • 如果您的父表中有“0”记录,那么这将是一个适当的默认值。例如考虑一个库存系统。如果您删除一个类别,该类别中的产品不会消失——它们仍然存在。所以你设置了一个永久的“默认”类别,例如id=0,这样当你删除“糟糕的圣诞礼物”类别时,奶奶的丑毛衣就会进入“默认”类别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2018-09-02
    • 2010-11-04
    • 2018-09-15
    • 2014-12-25
    • 1970-01-01
    相关资源
    最近更新 更多