@Igor heeft helemaal gelijk en een paar OR
'ed expressie zijn snel en eenvoudig.
Voor een lange lijst met kolommen (a
, b
, c
, d
, e
, f
, g
in het voorbeeld), is dit korter en net zo snel:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db<>viool hier
Oude SQL Fiddle.
Hoe werkt het?
Een meer uitgebreide vorm van het bovenstaande zou zijn:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW
is hier overbodige syntaxis.
Een ROW
testen uitdrukking met IS NULL
alleen meldt TRUE
als elke kolom is NULL
- wat precies is wat we willen uitsluiten.
Het is niet mogelijk om deze uitdrukking eenvoudig om te keren met (a,b,c,d,e,f,g) IS NOT NULL
, omdat dat zou testen dat elke afzonderlijke kolom IS NOT NULL
. Negeer in plaats daarvan de hele uitdrukking met NOT
. Voilá.
Meer details in de handleiding hier en hier.
Een uitdrukking van de vorm:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
zou hetzelfde bereiken, minder elegant en met een grote beperking:werkt alleen voor kolommen van overeenkomend gegevenstype , terwijl de controle op een ROW
expressie werkt met elke kolommen.