#sql #sql_server
Есть таблица: | ID | Login | Post | +----+-------+----------+ | 1 | Woddy | manager | | 2 | Simi | operator | | 3 | Woddy | agent | Надо ограничение, например чтобы у Woddy не было разных Post(должностей). Создал индекс, сделал уникальным поля Login и Post. Как понимаю это можно реализовать через Constraints, тогда что писать в expressions. Нужно чтобы Login не повторялся Скрипт индекса: ALTER TABLE Persons ADD CONSTRAINT uc_Person UNIQUE (Login ,Post)
Ответы
Ответ 1
Созданный вами: CONSTRAINT uc_Person UNIQUE (Login, Post) делает пару (Login ,Post) уникальной, т.е. Woddy может быть manager, но такая запись может быть только одна, Woddy не может быть manager дважды, и ему не запрещено иметь другие Post. Соответственно, чтобы Login не повторялся должно быть: CONSTRAINT uc_Person UNIQUE (Login)Ответ 2
пример из первого результата гуглинга по запросу ms sql unique constraint USE AdventureWorks2012; GO CREATE TABLE Production.TransactionHistoryArchive4 ( TransactionID int NOT NULL, CONSTRAINT AK_TransactionID UNIQUE(TransactionID) ); GOОтвет 3
CREATE TABLE Persons ( Id INT IDENTITY, Name VARCHAR(50) NOT NULL ) ON [PRIMARY] GO CREATE UNIQUE INDEX Name ON Persons (Name) GO INSERT INTO Persons (Name) VALUES ('Email'), ('Twitter'); Попытаемся вставить дубликат: insert into Persons (Name) Values ('Twitter'); Получаем: Cannot insert duplicate key row in object 'dbo.Persons' with unique index 'Name'. The duplicate key value is (Twitter).
Комментариев нет:
Отправить комментарий