Как обеспечить, чтобы в поле не было дубликатов?MS SQL Server 2014 - PullRequest
0 голосов
/ 01 мая 2019

У меня есть следующая таблица: Клиент (Id, Name, employeeID)

Таблица уже создана и пуста. Я не хочу удалять дублирующиеся данные, все, что мне нужно, это ИЗМЕНИТЬ таблицу, чтобы гарантировать отсутствие дублирующихся данных

Я хочу использовать ALTER и убедиться, что в employeeID нет дубликатов.

Будет

ALTER TABLE Customers
UNIQUE(employeeID)
ADD CONSTRAINT

Есть ли лучший способ?

Ответы [ 3 ]

2 голосов
/ 01 мая 2019

Насколько я понимаю, я создаю Уникальный индекс следующим образом:

create table unicondtional (
 i int identity (1,1) 
 , j int 
)

insert into unicondtional values (1), (1) 

select * from unicondtional 

-- assume 'unicondtional' is table like what you have, so far. 

CREATE UNIQUE NONCLUSTERED INDEX unique_with_condition ON unicondtional 
(
    j
)
WHERE (i > 2) -- max (i) 

-- create unique index with condition. 
-- from the 'where' clause, we say that, Index should be ensure the unique value insertion. 

insert into unicondtional values (1), (2), (3) -- See the Note.
-- successful insert. 

select * from unicondtional 

insert into unicondtional values (2)
-- due to the Unique Index, duplicate is not allowed by the Index.

update unicondtional 
set j = 3 
where j = 1 
-- before the Index(On the first two rows), duplicates are exist.  

select * from unicondtional 

Итак, вам не нужно удалять существующие дубликаты записей.

Примечание: После индекса, если вы считаете 1 дубликатом, тогда вы идете с Trigger вместо Unique Index.

2 голосов
/ 01 мая 2019

Добавление уникального ограничения гарантирует, что в будущем не будут добавлены повторяющиеся записи:

ALTER TABLE Customers
ADD CONSTRAINT choose_a_name_for_the_constraint UNIQUE (EmployeeID);   

В принципе, все правильно, только небольшая проблема с порядком ключевых слов.

Если вы работаете с SQLS, учтите также, что подобные тривиальные операции можно выполнять через графический интерфейс в SSMS, и он будет направлять процесс.Вы также можете заставить его превратить изменения в сценарии для вас, щелкнув правой кнопкой мыши по таблице и выбрав «Таблица сценариев как ...», чтобы вы могли использовать их в других местах

1 голос
/ 01 мая 2019

Поскольку ваша таблица пуста, вы можете напрямую запустить

ALTER TABLE Customers
ADD CONSTRAINT UQ_EmployeeID UNIQUE(EmployeeId);

Это обеспечит отсутствие дубликатов EmployeeId можно добавить в эту таблицу.

Но если в таблице есть какие-то данные и уже есть дубликат EmployeeId, вы получите сообщение об ошибке

Оператор CREATE UNIQUE INDEX завершен, поскольку был найден повторяющийся ключ для имени объекта «Customers» и имени индекса «UQ_EmployeeId». Значение ключа-дубликата: ("DuplicateValueHere").

На ваш вопрос

Есть ли лучший способ?

У вас уже есть лучший способ предотвратить вставку дубликатов.


См Create Unique Constraints а также ALTER TABLE (Transact-SQL)

...