@Игор е съвсем прав и няколко 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 изразът работи с всяко колони.