@Igor hat recht und ein paar OR
'ed Ausdruck sind schnell und einfach.
Für eine lange Liste von Spalten (a
, b
, c
, d
, e
, f
, g
im Beispiel), ist dies kürzer und genauso schnell:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db<>hier fummeln
Alte SQL-Geige.
Wie funktioniert es?
Eine ausführlichere Form des Obigen wäre:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW
ist hier redundante Syntax.
Testen einer ROW
Ausdruck mit IS NULL
nur meldet TRUE
wenn jede einzelne Spalte ist NULL
- und genau das wollen wir ausschließen.
Es ist nicht möglich, diesen Ausdruck einfach mit (a,b,c,d,e,f,g) IS NOT NULL
umzukehren , denn das würde testen, ob jede einzelne Spalte IS NOT NULL
ist . Negieren Sie stattdessen den gesamten Ausdruck mit NOT
. Voilá.
Weitere Details im Handbuch hier und hier.
Ein Ausdruck der Form:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
würde dasselbe erreichen, weniger elegant und mit einer großen Einschränkung:funktioniert nur für Spalten mit passendem Datentyp , während die Prüfung auf eine ROW
Ausdruck funktioniert mit any Spalten.