SQL Server допускает только True для одного из каждого типа - PullRequest
3 голосов
/ 12 апреля 2019

У меня есть таблица 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 |

Я хочу установить ограничение, чтобы гарантировать, что никакие другие записи не разрешены, где Basketball имеет IsTheBest, установленный в true. Сказал иначе, если я попытался отредактировать ID 2, чтобы он был IsTheBest = true, я хочу, чтобы он потерпел неудачу.

1 Ответ

8 голосов
/ 12 апреля 2019

Вы можете использовать отфильтрованный уникальный индекс:

create unique index unq_sport_isthebest
    on t(sport)
    where isthebest = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...