2015-09-09 3 views
0

У меня есть таблица SQL Server с двумя столбцами id: INT и отмечено: BOOLEAN. Можно ли добавить ограничение, которое гарантирует, что есть только одна запись для (id = a, flagged = b), где b = 1?Ограничение частичного значения таблицы sql server

Например:

нормально (id=1, flagged=1) (id=1, flagged=0) (id=1, flagged=0) не нормально (id=1, flagged=1) (id=1, flagged=1) (id=1, flagged=0)

+0

Если вы ищете здесь (или в Интернете в целом) для «условного уникального ограничения», вы должны найти множество результатов. Как правило, либо фильтрованный индекс, либо индексированный вид (для более ранних версий) соответствует счету. –

+0

@ Lloyd Unique Filtered Index работает именно таким образом – lad2025

ответ

3

Создать уникальный индекс с фильтром:

CREATE UNIQUE INDEX idx_name ON your_table(id) 
    WHERE flagged=1; 

Демо:

SqlFiddleDemo

CREATE TABLE your_table(id INT, flagged INT); 

CREATE UNIQUE INDEX idx_name ON your_table(id) 
    WHERE flagged=1; 


INSERT INTO your_table(id, flagged) 
VALUES (1, 0), (1,1), (1,0); 

INSERT INTO your_table(id, flagged) -- will fail 
VALUES (1,1); 

/* Cannot insert duplicate key row in object 'dbo.your_table' 
    with unique index 'idx_name'. The duplicate key value is (1).*/ 
+2

Для downvoters оставить комментарий с сообщением, что не работает – lad2025

+1

Отличный ответ. Не уверен, почему кто-то хотел бы проголосовать за это. Спасибо, парень2025. –

Смежные вопросы