我有一个包含两个链接列的表,一个强制布尔值和一个可选日期。布尔值为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
我收到检查约束冲突错误,更新失败。我做错了什么?
更新
我很遗憾地告诉我,我输错了一个专栏名称...抱歉浪费你的时间。我希望我能删除这个问题:_(
答案 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)
抱歉,虚假问题(自我回复似乎是关闭它的唯一方法)。