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