某些列应全部填充或全部为空

Some columns should all be filled or all should be nulls

我的 table(10 列)有 4 列(A、B、C、D)应该全部为空或全部填充。

我尝试按以下方式进行:

constraint chk_same check (A is not null AND B is not null And C is not null AND is not null) OR (A is null AND B is null And C is null AND D is null)

看起来很糟糕,有没有 better/easier 的方法?

你的方法很好。更通用的方法是计算 NULL 值的数量并检查:

constraint chk_same
    check ( ((case when A is null then 1 else 0 end) +
             (case when B is null then 1 else 0 end) +
             (case when C is null then 1 else 0 end) +
             (case when D is null then 1 else 0 end)
            ) in (0, 4)
          ) ;

这更通用,因为您可以轻松检查 4 列中的 2 列或 4 列中的 3 列是否具有 NULL 值。