@Igor está certo e alguns
OR 'ed são rápidos e simples. Para uma longa lista de colunas (
a , b , c , d , e , f , g no exemplo), isso é mais curto e rápido:CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db<>mexa aqui
Antigo violino SQL.
Como funciona?
Uma forma mais detalhada do acima seria:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW é sintaxe redundante aqui. Testando uma
ROW expressão com IS NULL somente relata TRUE se cada coluna é NULL - o que é exatamente o que queremos excluir. Não é possível simplesmente reverter esta expressão com
(a,b,c,d,e,f,g) IS NOT NULL , porque isso testaria se cada coluna IS NOT NULL . Em vez disso, negue a expressão inteira com NOT . Voilá. Mais detalhes no manual aqui e aqui.
Uma expressão da forma:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
alcançaria o mesmo, menos elegantemente e com uma grande restrição:só funciona para colunas de tipo de dados correspondente , enquanto a verificação em um
ROW expressão funciona com qualquer colunas.