更新时的约束违规

时间:2010-02-17 13:04:10

标签: sql sql-server sql-server-2005 tsql

我有一个包含两个链接列的表,一个强制布尔值和一个可选日期。布尔值为FALSE时只能有一个日期。所以我有这个结构:

CREATE TABLE FOO (
    FOO_ID INT IDENTITY(1, 1) NOT NULL,
    MY_DATE DATETIME,
    MY_BOOLEAN BIT DEFAULT 0 NOT NULL,

    CONSTRAINT FOO_PK PRIMARY KEY (FOO_ID)
);

我写了这个约束来保持数据的完整性:

ALTER TABLE FOO
ADD CONSTRAINT FOO_CHK CHECK (
    MY_BOOLEAN=0 OR MY_DATE IS NULL
);

我必须遗漏一些明显的东西,但事实是我无法运行此更新查询:

UPDATE FOO
SET 
    MY_BOOLEAN=1,
    MY_DATE=NULL
WHERE FOO_ID=31416

我收到检查约束冲突错误,更新失败。我做错了什么?


更新

我很遗憾地告诉我,我输错了一个专栏名称...抱歉浪费你的时间。我希望我能删除这个问题:_(

2 个答案:

答案 0 :(得分:2)

我已经使用此脚本对此进行了测试,并且没有出现任何错误。还有其他约束吗?

CREATE TABLE FOO (
    FOO_ID INT IDENTITY(1, 1) NOT NULL,
    MY_DATE DATETIME,
    MY_BOOLEAN BIT DEFAULT 0 NOT NULL,

    CONSTRAINT FOO_PK PRIMARY KEY (FOO_ID)
);
ALTER TABLE FOO
ADD CONSTRAINT FOO_CHK CHECK (
    MY_BOOLEAN=0 OR MY_DATE IS NULL
);

set identity_insert foo on
insert into foo(FOO_ID, my_date, MY_BOOLEAN)
select 31416, '20090101', 0
set identity_insert foo off

UPDATE FOO
SET 
    MY_BOOLEAN=1,
    MY_DATE=NULL
WHERE FOO_ID=31416

答案 1 :(得分:0)

抱歉,虚假问题(自我回复似乎是关闭它的唯一方法)。