SQL Server уникальное ограничение (но только иногда) - PullRequest
5 голосов
/ 30 сентября 2010

Представьте, что у меня есть таблица с 3 столбцами:

ID (уникальный идентификатор) Описание (varchar 2000) IsDeleted (булево)

Я хочу добавить уникальное ограничение, чтобы все описания были уникальными. НО только для активных записей, т.е. IsDelete = false. Если пользователь помечает запись как удаленную, он может повторно добавить запись с тем же описанием, что и удаленная запись, но не с активной записью.

Итак, я хочу, чтобы ограничение влияло только на запись, где IsDeleted = false.

Тим

Ответы [ 2 ]

6 голосов
/ 30 сентября 2010

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

CREATE UNIQUE NONCLUSTERED INDEX ix_table_UNC ON table(Description) WHERE IsDeleted = 0

До SQL 2008 вам нужно было создать уникальный индекс для представления таблицы, выбирая только не удаленные записи:

CREATE VIEW dbo.vw_ActiveDescriptions WITH SCHEMABINDING
AS
SELECT Id, Description
FROM Table
WHERE IsDeleted= 0
GO
CREATE UNIQUE CLUSTERED INDEX ix_vw_ActiveDescriptions_UC ON dbo.vw_ActiveDescriptions(Description);
2 голосов
/ 30 сентября 2010

Создать новую таблицу для удаленных строк.Затем обеспечьте уникальность с помощью уникального ограничения.Вам придется уменьшить описание, поскольку максимальный размер ключа в SQL Server составляет 900 байт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...