@Igor ma rację i kilka OR Wyrażenia ed są szybkie i proste.
Długa lista kolumn (a , b , c , d , e , f , g w przykładzie), jest to krótsze i równie szybkie:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db<>graj tutaj
Stare skrzypce SQL.
Jak to działa?
Bardziej gadatliwa forma powyższego to:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW jest tutaj zbędną składnią.
Testowanie ROW wyrażenie z IS NULL tylko zgłasza TRUE jeśli każda kolumna jest NULL - co jest dokładnie tym, co chcemy wykluczyć.
Nie można po prostu odwrócić tego wyrażenia za pomocą (a,b,c,d,e,f,g) IS NOT NULL , ponieważ sprawdziłoby to, że każda pojedyncza kolumna IS NOT NULL . Zamiast tego zanegować całe wyrażenie za pomocą NOT . Voila.
Więcej szczegółów w instrukcji tutaj i tutaj.
Wyrażenie postaci:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
osiągnąłby to samo, mniej elegancko iz poważnym ograniczeniem:działa tylko dla kolumn pasującego typu danych , podczas gdy sprawdzenie ROW wyrażenie działa z dowolnym kolumny.