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