仅当 t1.f3 在 Microsoft sql 服务器中为空时,如何允许字段 t1.f1 引用 t2.f2?
How to allow field t1.f1 to reference t2.f2 only if t1.f3 is null in microsoft sql server?
为了简单起见:假设我们有包含这些定义的表:
create table t1 (id int primary key, f1 int references t2(f2), f3 int references t1(id) )
create table t2 (id int primary key, f2 int)
是否可以做一个约束,只允许在 f3 为 null 时设置 f1?这将如何完成?
首先,让我们检查用例并将它们转换为布尔语句:
- 如果没有设置f1(即
null
),没有问题,我们不关心f3。
- 如果设置了f1(i.e.m,则不是
null
),f3必须是null
。
这是一个简单的 or
条件 - f1 is null or f3 is null
。一旦我们理解了这一点,添加 check
约束就是一件简单的事情:
ALTER TABLE t1 ADD CONSTRAINT t1_chk CHECK (f1 IS NULL OR f3 IS NULL)
为了简单起见:假设我们有包含这些定义的表:
create table t1 (id int primary key, f1 int references t2(f2), f3 int references t1(id) )
create table t2 (id int primary key, f2 int)
是否可以做一个约束,只允许在 f3 为 null 时设置 f1?这将如何完成?
首先,让我们检查用例并将它们转换为布尔语句:
- 如果没有设置f1(即
null
),没有问题,我们不关心f3。 - 如果设置了f1(i.e.m,则不是
null
),f3必须是null
。
这是一个简单的 or
条件 - f1 is null or f3 is null
。一旦我们理解了这一点,添加 check
约束就是一件简单的事情:
ALTER TABLE t1 ADD CONSTRAINT t1_chk CHECK (f1 IS NULL OR f3 IS NULL)