Ответ 1
@Igor совершенно прав, и несколько выражений OR
'ed бывают быстрыми и простыми.
Для длинного списка столбцов (a
, b
, c
, d
, e
, f
, g
в этом примере) это короче и так же быстро:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
Как это работает?
Более сложной формой выше было бы:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW
здесь избыточный синтаксис.
Тестирование выражения ROW
с IS NULL
сообщает только TRUE
, если каждый столбец равен NULL
- это именно то, что мы исключаем.
Невозможно просто отменить это выражение с помощью (a,b,c,d,e,f,g) IS NOT NULL
, потому что это проверит, что каждый столбец IS NOT NULL
. Вместо этого отрицайте все выражение с помощью NOT
. Вуаля.
Подробнее в руководстве здесь и здесь.
Выражение вида:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
достигнет того же, менее изящно и с большим ограничением: работает только для столбцов совпадающего типа данных, а проверка выражения ROW
работает с любыми столбцами.