T-SQL 约束检查值是否为 0 或唯一
T-SQL constraint to check if value is either 0 OR unique
我正在设计一个数据库,其中员工需要由管理员激活。当新员工注册时,他们的工作站 (int) 默认设置为 0。但是,我也不允许每个工作站有超过 1 名员工。所以我在想是否有一种方法允许值 0 重复,但强制任何其他数字都是唯一的。
您可以使用部分唯一索引。例如:
create unique index ix1 on employees (workstation) where workstation <> 0;
如:
create table employees (
id int,
name varchar(10),
workstation int not null
);
create unique index ix1 on employees (workstation) where workstation <> 0;
insert into employees (id, name, workstation) values (1, 'Anne', 100);
insert into employees (id, name, workstation) values (2, 'Peter', 101);
insert into employees (id, name, workstation) values (3, 'Joel', 100); -- fails
insert into employees (id, name, workstation) values (4, 'Niko', 0);
insert into employees (id, name, workstation) values (5, 'Akina', 0); -- succeeds
这是您无法使用传统约束强制执行的约束之一。
参见 db<>fiddle 中的 运行 示例。如您所见,只有 Joel, 100
被拒绝。另外两个 workstation
= 0 的情况被插入。
我正在设计一个数据库,其中员工需要由管理员激活。当新员工注册时,他们的工作站 (int) 默认设置为 0。但是,我也不允许每个工作站有超过 1 名员工。所以我在想是否有一种方法允许值 0 重复,但强制任何其他数字都是唯一的。
您可以使用部分唯一索引。例如:
create unique index ix1 on employees (workstation) where workstation <> 0;
如:
create table employees (
id int,
name varchar(10),
workstation int not null
);
create unique index ix1 on employees (workstation) where workstation <> 0;
insert into employees (id, name, workstation) values (1, 'Anne', 100);
insert into employees (id, name, workstation) values (2, 'Peter', 101);
insert into employees (id, name, workstation) values (3, 'Joel', 100); -- fails
insert into employees (id, name, workstation) values (4, 'Niko', 0);
insert into employees (id, name, workstation) values (5, 'Akina', 0); -- succeeds
这是您无法使用传统约束强制执行的约束之一。
参见 db<>fiddle 中的 运行 示例。如您所见,只有 Joel, 100
被拒绝。另外两个 workstation
= 0 的情况被插入。