SQL Server 2008: проверка ограничений, гарантирующих, что только одно значение во всех строках установлено в 1, а в других - 0 - PullRequest
4 голосов
/ 27 сентября 2010

Необходимо создать ограничение для столбца, которое гарантирует, что только одно значение во всех строках равно 1, а все остальные равны 0.

Решение с триггерами существует, но я бы хотел что-то встроить.

Такое вообще возможно?

1 Ответ

9 голосов
/ 27 сентября 2010

Редактировать

На самом деле я только что заметил, что на SQL Server 2008 вы можете использовать отфильтрованный индекс для этого

CREATE UNIQUE NONCLUSTERED INDEX UIX ON YourTable (col) where col = 1

Оригинальный ответ

Самым простым способом, вероятно, было бы сохранить этот специальный ПК в отдельной таблице из одной строки.Не более одного аспекта строки может быть принудительно установлен с помощью проверочных ограничений.

CREATE TABLE OneRowTable
(
lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY CHECK (lock = 'X'),
OtherTablePK int
);

В противном случае, если у вас может быть поле id, состоящее из натуральных чисел, вы можете добавить вычисляемый столбец со следующим определением

case when col=1 then -1 else id end

и добавьте к этому уникальное ограничение.

...