添加特殊约束以避免具有此条件的重复行?

fdk*_*fsf 6 sql t-sql sql-server unique-constraint sql-server-2008

我有一个看起来像这样的表:

ClientId  FloorNum   BedNum   IsActive
11        2          212      1        
12        2          214      0        
12        2          214      1        
13        2          215      0        
13        2          215      0        
13        2          215      0        
13        2          215      0        
13        2          215      1        
12        2          215      1        
Run Code Online (Sandbox Code Playgroud)

如您所见,FloorNum/BedNum组合2/215有两行,其中IsActive等于1.这不可能发生.

另一方面,一个FloorNum/BedNum组合可以有许多行,其中IsActive等于0.

如何向表中添加约束,以便FloorNum/BedNum组合只能有一行IsActive = 1?

任何帮助表示赞赏.

Igo*_*gor 6

您可以使用WHERE子句创建筛选的唯一索引.

CREATE UNIQUE NONCLUSTERED INDEX IX_[index name]_FloorNum_BedNum ON [myTable] (
    FloorNum ASC,
    BedNum ASC)
WHERE (IsActive = 1)
Run Code Online (Sandbox Code Playgroud)

这只会考虑IsActive列设置的记录1.

根据您的描述,我认为ClientId在此示例中没有必要,但如果我错了,您也可以将它添加到索引中.