SQL Server 2008: проверки ограничения, которые гарантируют, что только одно значение во всех строках установлено на 1, а другие - 0

StackOverflow https://stackoverflow.com/questions/3804663

Вопрос

Существует необходимость создавать ограничение в столбце, которая гарантирует, что только одно значение во всех рядах составляет 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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top