@Igor má docela pravdu a pár OR 'ed expression jsou rychlé a jednoduché.
Pro dlouhý seznam sloupců (a , b , c , d , e , f , g v příkladu) je kratší a stejně rychlý:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db<>zde hrajte
Staré SQL Fiddle.
Jak to funguje?
Podrobnější forma výše uvedeného by byla:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW je zde nadbytečná syntaxe.
Testování ROW výraz s IS NULL pouze hlásí TRUE pokud každý sloupec je NULL - což je náhodou přesně to, co chceme vyloučit.
Není možné jednoduše obrátit tento výraz pomocí (a,b,c,d,e,f,g) IS NOT NULL , protože by to otestovalo, že každý jednotlivý sloupec IS NOT NULL . Místo toho negujte celý výraz pomocí NOT . Voilá.
Více podrobností v návodu zde a zde.
Výraz ve tvaru:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
by dosáhlo stejného, méně elegantně a s velkým omezením:funguje pouze pro sloupce odpovídajícího datového typu , zatímco zaškrtnete ROW výraz funguje s jakýmkoli sloupce.