@Igor a tout à fait raison et quelques OR
'ed expression sont rapides et simples.
Pour une longue liste de colonnes (a
, b
, c
, d
, e
, f
, g
dans l'exemple), c'est plus court et tout aussi rapide :
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db<>jouez ici
Ancien violon SQL.
Comment ça marche ?
Une forme plus détaillée de ce qui précède serait :
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW
est une syntaxe redondante ici.
Tester un ROW
expression avec IS NULL
uniquement rapporte TRUE
si chaque colonne est NULL
- qui se trouve être exactement ce que nous voulons exclure.
Il n'est pas possible d'inverser simplement cette expression avec (a,b,c,d,e,f,g) IS NOT NULL
, car cela testerait que chaque colonne IS NOT NULL
. Au lieu de cela, annulez l'expression entière avec NOT
. Voilà.
Plus de détails dans le manuel ici et ici.
Une expression de la forme :
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
obtiendrait la même chose, moins élégamment et avec une restriction majeure :ne fonctionne que pour les colonnes de type de données correspondant , tandis que la vérification d'un ROW
l'expression fonctionne avec tout colonnes.