SQL Server 2008: проверки ограничения, которые гарантируют, что только одно значение во всех строках установлено на 1, а другие - 0
-
25-09-2019 - |
Вопрос
Существует необходимость создавать ограничение в столбце, которая гарантирует, что только одно значение во всех рядах составляет 1, и все остальные являются 0.
Раствор с триггерами существует, но я хотел бы иметь что-то встроенное.
Такая вещь возможна вообще?
Решение
Редактировать
На самом деле я только что заметил, что вы на SQL Server 2008 вы можете использовать фильтрованный индекс для этого
CREATE UNIQUE NONCLUSTERED INDEX UIX ON YourTable (col) where col = 1
Оригинальный ответ
Самым простым способом, вероятно, будет хранить этот специальный PK в отдельной таблице ряда. Не более одного аспекта ряда могут быть применены с помощью проверки ограничений.
CREATE TABLE OneRowTable
(
lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY CHECK (lock = 'X'),
OtherTablePK int
);
В противном случае предполагается, что у вас может быть идентификационное поле, состоящее из положительных целых чисел, вы можете добавить компьютерный столбец со следующим определением
case when col=1 then -1 else id end
и добавьте уникальное ограничение на это.