Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Как запретить повторение значений в таблице?

#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).

Комментариев нет:

Отправить комментарий