@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.