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