@Igor benar dan beberapa OR
ekspresi 'ed cepat dan sederhana.
Untuk daftar panjang kolom (a
, b
, c
, d
, e
, f
, g
dalam contoh), ini lebih pendek dan sama cepatnya:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db<>main biola di sini
Fiddle SQL Lama.
Bagaimana cara kerjanya?
Bentuk yang lebih verbose dari di atas adalah:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW
adalah sintaks yang berlebihan di sini.
Menguji ROW
ekspresi dengan IS NULL
hanya melaporkan TRUE
if setiap kolom adalah NULL
- yang kebetulan persis seperti yang ingin kami kecualikan.
Ekspresi ini tidak mungkin dibalik begitu saja dengan (a,b,c,d,e,f,g) IS NOT NULL
, karena itu akan menguji bahwa setiap kolom IS NOT NULL
. Sebagai gantinya, hilangkan seluruh ekspresi dengan NOT
. Voila.
Detail lebih lanjut dalam manual di sini dan di sini.
Ekspresi bentuk:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
akan mencapai hal yang sama, kurang elegan dan dengan batasan utama:hanya berfungsi untuk kolom tipe data yang cocok , sedangkan centang pada ROW
ekspresi bekerja dengan apa saja kolom.