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

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

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

另一方面,一个FloorNum/BedNum组合可以包含IsActive等于0的许多行。

如何为表添加约束,以便FloorNum/BedNum组合只能包含IsActive = 1的一行?

任何帮助表示赞赏。

最佳答案

您可以使用WHERE子句创建a filtered unique index

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

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

根据您的描述,我认为在此示例中不需要ClientId,但是如果我错了,也可以将其添加到索引中。

关于sql - 添加特殊约束以避免在这种情况下重复行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36696418/

10-11 02:53