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