我有一个SQL Server表,我只希望每种类型中的一种都允许为true。例如,如果我具有以下结构:

|  ID  | Sport      | IsTheBest   |
|:-----|------------|------------:|
|  1   | Basketball |           1 |
|  2   | Basketball |           0 |
|  3   | Basketball |           0 |
|  4   | Basketball |           0 |
|  5   | Baseball   |           0 |
|  6   | Baseball   |           1 |
|  7   | Baseball   |           0 |

我想要一个约束来确保在BasketballIsTheBest设置为true的情况下,不允许其他记录。换句话说,如果我尝试将ID 2编辑为IsTheBest = true,那么我希望它失败。

最佳答案

您可以使用过滤后的唯一索引:

create unique index unq_sport_isthebest
    on t(sport)
    where isthebest = 1;

08-24 12:42