@Igor ha ragione e un paio di OR 'ed expression sono veloci e semplici.
Per un lungo elenco di colonne (a , b , c , d , e , f , g nell'esempio), questo è più breve e altrettanto veloce:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db<>gioca qui
Old SQL Fiddle.
Come funziona?
Una forma più dettagliata di quanto sopra sarebbe:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW è ridondante la sintassi qui.
Testare una ROW espressione con IS NULL solo segnala TRUE se ogni singola colonna è NULL - che è esattamente ciò che vogliamo escludere.
Non è possibile semplicemente invertire questa espressione con (a,b,c,d,e,f,g) IS NOT NULL , perché ciò verificherebbe che ogni singola colonna IS NOT NULL . Invece, nega l'intera espressione con NOT . Voilà.
Maggiori dettagli nel manuale qui e qui.
Un'espressione della forma:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
otterrebbe lo stesso risultato, in modo meno elegante e con una limitazione importante:funziona solo per colonne di tipo di dati corrispondente , mentre il controllo su una ROW l'espressione funziona con qualsiasi colonne.