我想知道是否可以首先评估CHECK CONSTRAINT中的某些条件,然后对另一个表达式执行OR。
我的情况:
4表:\
我想制作一个基本遵循以下逻辑的检查约束:
if main.type = 0:
main.a != NULL
main.b = NULL
main.c = NULL
elif main.type = 2:
main.a = NULL
main.b = NULL
main.c != NULL
如果类型= 1,我不在乎填写的内容。
我尝试像这样做一个CHECK CONSTRAINT:
CHECK((main.type = 0 AND main.a != NULL AND main.b = NULL AND main.c = NULL) OR
(main.type = 2 AND main.a = NULL AND main.b = NULL AND main.c != NULL))
问题是在应用此约束后内部括号被删除/忽略,这意味着它变得大部分是无意义的并且它不起作用。
这可以用CHECK CONSTRAINT解决,还是应该使用触发器?
答案 0 :(得分:4)
!= NULL
!那不行。这似乎是你想要的逻辑:
CHECK ( (type = 0 and a is not null and b is null and c is null) or
(type = 2 and a is null and b is null and c is not null) or
(type = 1)
)