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