Условное уникальное ограничение SQL-сервера - составные ключи - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть ситуация, когда мне нужно применить уникальное ограничение для набора столбцов, но только для одного значения столбца. Предположим, что есть таблица с именем Person и столбцами «Name» и «isActive». Ниже должны быть результаты

INSERT INTO Person (name,isActive) VALUES ('testUser1',0); --Success
INSERT INTO Person (name,isActive) VALUES ('testUser1',1); --Success
INSERT INTO Person (name,isActive) VALUES ('testUser1',0); --Success
INSERT INTO Person (name,isActive) VALUES ('testUser1',1); --Failure
INSERT INTO Person (name,isActive) VALUES ('testUser1',0); --Success

INSERT INTO Person (name,isActive) VALUES ('testUser2',0); --Success
INSERT INTO Person (name,isActive) VALUES ('testUser2',1); --Success
INSERT INTO Person (name,isActive) VALUES ('testUser2',0); --Success
INSERT INTO Person (name,isActive) VALUES ('testUser2',1); --Failure
INSERT INTO Person (name,isActive) VALUES ('testUser2',0); --Success

В основном мне нужно, чтобы одно и то же имя и активные = 1 строки не повторялись.

1 Ответ

0 голосов
/ 06 сентября 2018

Попробуйте отфильтрованный уникальный индекс :

create unique index index_name on Person (name) where isActive = 1
...