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