@Игор е съвсем прав и няколко OR
Изразите са бързи и прости.
За дълъг списък с колони (a
, b
, c
, d
, e
, f
, g
в примера), това е по-кратко и също толкова бързо:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db<>цигулка тук
Стара SQL Fiddle.
Как работи?
По-подробна форма на горното би била:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW
е излишен синтаксис тук.
Тестване на ROW
израз с IS NULL
само отчита TRUE
ако всяка отделна колона е NULL
- което се оказва точно това, което искаме да изключим.
Не е възможно просто да обърнете този израз с (a,b,c,d,e,f,g) IS NOT NULL
, защото това ще тества, че всяка отделна колона IS NOT NULL
. Вместо това, отричайте целия израз с NOT
. Авоа.
Повече подробности в ръководството тук и тук.
Израз във формата:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
ще постигне същото, по-малко елегантно и с голямо ограничение:работи само за колони от съвпадащ тип данни , докато проверката на ROW
изразът работи с всяко колони.