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