@Igor khá đúng và một vài OR 'ed biểu thức rất nhanh và đơn giản.
Để có một danh sách dài các cột (a , b , c , d , e , f , g trong ví dụ), điều này ngắn hơn và nhanh như sau:
CHECK (NOT (a,b,c,d,e,f,g) IS NULL)
db <> fiddle here
SQL Fiddle cũ.
Nó hoạt động như thế nào?
Một dạng chi tiết hơn ở trên sẽ là:
CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)
ROW là cú pháp thừa ở đây.
Kiểm tra ROW biểu thức với IS NULL chỉ báo cáo TRUE nếu mọi cột đơn lẻ là NULL - đó là chính xác những gì chúng tôi muốn loại trừ.
Không thể đơn giản đảo ngược biểu thức này với (a,b,c,d,e,f,g) IS NOT NULL , vì điều đó sẽ kiểm tra rằng mọi cột duy nhất IS NOT NULL . Thay vào đó, hãy phủ định toàn bộ biểu thức bằng NOT . Voilá.
Thêm chi tiết trong sách hướng dẫn tại đây và tại đây.
Biểu thức của biểu mẫu:
CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)
sẽ đạt được điều tương tự, ít thanh lịch hơn và có một hạn chế lớn:chỉ hoạt động cho các cột của loại dữ liệu phù hợp , trong khi kiểm tra một ROW biểu thức hoạt động với bất kỳ cột.