对两列

时间:2015-09-03 12:03:59

标签: sql sql-server

给出以下表格列。当且仅当UserId是唯一的时,我如何确保active只能设置为true?注意,orgId和UserId是多对多关系的复合键,userId也可以是重复的。

OrgId    int 
UserId   int
Active   bit

示例1 - 无效,因为userid出现2次,active被设置为true两次。

orgId userId active
1      2       1
2      2       1   

示例:2有效。

orgId userId active
1      2       1
2      2       0
3      3       1

2 个答案:

答案 0 :(得分:5)

您希望确保userId的最多一个值为active = 1。您可以使用筛选的唯一索引执行此操作:

create unique index idx_table_userId_active
    on table(userId)
    where active = 1;

答案 1 :(得分:0)

这必须由trigger完成。 Check约束依赖于同一行上的数据 - 这不是您的情况。