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