我一直在努力解决这个检查约束几个小时,并希望有人能够解释为什么这个检查约束没有做我认为它应该做的事情.
ALTER TABLE CLIENTS
add CONSTRAINT CHK_DISABILITY_INCOME_TYPE_ID CHECK ((IS_DISABLED IS NULL AND DISABILITY_INCOME_TYPE_ID IS NULL) OR (IS_DISABLED = 0 AND DISABILITY_INCOME_TYPE_ID IS NULL) OR (IS_DISABLED = 1));
Run Code Online (Sandbox Code Playgroud)
基本上,您必须被禁用以收集残疾收入.看起来似乎(IS_DISABLED IS NULL AND DISABILITY_INCOME_TYPE_ID IS NULL)
没有强制执行此检查约束的第一部分(见下文).
可用值为DISABILITY_INCOME_TYPE_ID
1和2,通过外键强制执行.双方IS_DISABLED
并DISABILITY_INCOME_TYPE_ID
可以为空.
-- incorrectly succeeds (Why?)
INSERT INTO CLIENTS (IS_DISABLED, DISABILITY_INCOME_TYPE_ID) VALUES (null, 1);
INSERT INTO CLIENTS (IS_DISABLED, DISABILITY_INCOME_TYPE_ID) VALUES (null, 2);
-- correctly fails
INSERT INTO CLIENTS (IS_DISABLED, DISABILITY_INCOME_TYPE_ID) VALUES (0, 1);
INSERT INTO CLIENTS (IS_DISABLED, DISABILITY_INCOME_TYPE_ID) VALUES …
Run Code Online (Sandbox Code Playgroud)