@Igor har helt ret og et par OR
'ed udtryk er hurtige og enkle.
For en lang liste af kolonner (a
, b
, c
, d
, e
, f
, g
i eksemplet), er dette kortere og lige så hurtigt:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db<>spil her
Gamle SQL violin.
Hvordan fungerer det?
En mere udførlig form af ovenstående ville være:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW
er redundant syntaks her.
Test af en ROW
udtryk med IS NULL
kun rapporterer TRUE
hvis hver enkelt kolonne er NULL
- hvilket tilfældigvis er præcis det, vi ønsker at udelukke.
Det er ikke muligt blot at vende dette udtryk med (a,b,c,d,e,f,g) IS NOT NULL
, fordi det ville teste, at hver enkelt kolonne IS NOT NULL
. Negér i stedet hele udtrykket med NOT
. Voilá.
Flere detaljer i manualen her og her.
Et udtryk for formen:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
ville opnå det samme, mindre elegant og med en større begrænsning:virker kun for kolonner med matchende datatype , mens kontrollen på en ROW
udtryk fungerer med enhver kolonner.