我有关于SQL约束的问题,以便实现以下行为:
TableA有两列 column0和column1,数据条目中只有一个可以为NULL: 例如。: 如果column0为null,则column1不能为null 如果column1为null,则column0不能为null
为此,我构建了以下SQL约束:
CONSTRAINT column01_not_null_chk
CHECK (
( column0 IS NOT NULL
AND column1 IS NULL )
OR
( column1 IS NOT NULL
AND column0 IS NULL ) )
这是否正确实现我的行为?因为所有SQL都因此约束而被拒绝
答案 0 :(得分:3)
您描述的条件意味着其中至少有一个必须具有价值。因此,您的约束应该更正为:
CONSTRAINT column01_not_null_chk
CHECK (column0 IS NOT NULL OR column1 IS NOT NULL)
答案 1 :(得分:1)
似乎在SQL Server上正常工作:
create table t (
column0 int null
, column1 int null
, CONSTRAINT column01_not_null_chk
CHECK (
( column0 IS NOT NULL
AND column1 IS NULL )
OR
( column1 IS NOT NULL
AND column0 IS NULL ) )
);
insert into t values (null,1),(1,null);
select * from t;
--insert into t values (null,null) /* fail */
--insert into t values (1,1) /* fail */
rextester 演示:http://rextester.com/OQZNE39497
返回:
+---------+---------+
| column0 | column1 |
+---------+---------+
| NULL | 1 |
| 1 | NULL |
+---------+---------+