SQL Server仅允许对每种类型之一使用True

KJ3*_*KJ3 3 sql t-sql sql-server

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

|  ID  | Sport      | IsTheBest   |
|:-----|------------|------------:|
|  1   | Basketball |           1 |
|  2   | Basketball |           0 |
|  3   | Basketball |           0 |
|  4   | Basketball |           0 |
|  5   | Baseball   |           0 |
|  6   | Baseball   |           1 |
|  7   | Baseball   |           0 |
Run Code Online (Sandbox Code Playgroud)

我想代替约束,以确保没有其他记录被允许在那里Basketball已IsTheBest设置为true。换句话说,如果我尝试将ID 2编辑为IsTheBest= true,我希望它失败。

Gor*_*off 8

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

create unique index unq_sport_isthebest
    on t(sport)
    where isthebest = 1;
Run Code Online (Sandbox Code Playgroud)