跨多个 table 列设置唯一约束
Set a unique constraint across multiple table columns
我正在 SQL 服务器中创建一个 table,其中包含以下列:
ic_card_num,
employee_id,
active
如果只有一张卡处于活动状态,ic_card_num 和活动的多个副本是可以的:
employee_id | ic_card_num | active
123 | 111 | false
235 | 111 | true
987 | 111 | false
我想避免这种情况:
employee_id | ic_card_num | active
123 | 111 | true
235 | 111 | true
987 | 111 | false
我正在使用 SQL 服务器,有没有办法确保在我的 table 中不允许超过一个活动 id_card_num 记录?
使用唯一过滤索引:
create table ct
(
ic_card_num int,
employee_id int,
active bit
)
create unique index ak_OnlyOneActive_ic_card
on ct(ic_card_num)
where active = 1
insert into ct(employee_id, ic_card_num, active)
values (123,111,1),(978,111,0)
go
insert into ct(employee_id, ic_card_num, active)
values (235,111,1)
--Cannot insert duplicate key row in object 'dbo.ct' with unique index 'ak_OnlyOneActive_ic_card'. The duplicate key value is (111).
我正在 SQL 服务器中创建一个 table,其中包含以下列:
ic_card_num,
employee_id,
active
如果只有一张卡处于活动状态,ic_card_num 和活动的多个副本是可以的:
employee_id | ic_card_num | active
123 | 111 | false
235 | 111 | true
987 | 111 | false
我想避免这种情况:
employee_id | ic_card_num | active
123 | 111 | true
235 | 111 | true
987 | 111 | false
我正在使用 SQL 服务器,有没有办法确保在我的 table 中不允许超过一个活动 id_card_num 记录?
使用唯一过滤索引:
create table ct
(
ic_card_num int,
employee_id int,
active bit
)
create unique index ak_OnlyOneActive_ic_card
on ct(ic_card_num)
where active = 1
insert into ct(employee_id, ic_card_num, active)
values (123,111,1),(978,111,0)
go
insert into ct(employee_id, ic_card_num, active)
values (235,111,1)
--Cannot insert duplicate key row in object 'dbo.ct' with unique index 'ak_OnlyOneActive_ic_card'. The duplicate key value is (111).