#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).
Комментариев нет:
Отправить комментарий