@Igor har helt rätt och ett par OR 'ed expression är snabba och enkla.
För en lång lista med kolumner (a , b , c , d , e , f , g i exemplet) är detta kortare och lika snabbt:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db<>spela här
Gammal SQL-fiol.
Hur fungerar det?
En mer utförlig form av ovanstående skulle vara:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW är redundant syntax här.
Testar en ROW uttryck med IS NULL endast rapporterar TRUE om varje kolumn är NULL - vilket råkar vara precis vad vi vill utesluta.
Det är inte möjligt att helt enkelt vända detta uttryck med (a,b,c,d,e,f,g) IS NOT NULL , eftersom det skulle testa att varje kolumn IS NOT NULL . Negera i stället hela uttrycket med NOT . Voilá.
Mer information i manualen här och här.
Ett uttryck av formen:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
skulle uppnå samma, mindre elegant och med en stor begränsning:fungerar bara för kolumner med matchande datatyp , medan kontrollen på en ROW uttryck fungerar med alla kolumner.