如何确保字段中没有重复项? MS SQL Server 2014

问题描述 投票:-4回答:3

我有下表:Customer(Id,Name,employeeID)

该表已经创建并且为空,我不想删除重复数据,我想要的是更改表以确保不会有重复数据

我想使用ALTER并确保employeeID中没有重复项。

ALTER TABLE Customers
UNIQUE(employeeID)
ADD CONSTRAINT

有没有更好的办法?

sql sql-server tsql sql-server-2014
3个回答
2
投票

添加唯一约束将确保将来不会添加重复条目:

ALTER TABLE Customers
ADD CONSTRAINT choose_a_name_for_the_constraint UNIQUE (EmployeeID);   

你有基本正确的,只是一个关键字订单问题..

如果您正在使用SQLS,还要考虑像这样的简单操作可以通过SSMS中的GUI完成,它将指导该过程。您还可以通过右键单击表并选择“脚本表格为...”将其更改为脚本,以便您可以在其他地方使用它们


2
投票

根据我的理解,我创建Unique Index如下,

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


1
投票

由于您的表是空的,您可以直接运行

ALTER TABLE Customers
ADD CONSTRAINT UQ_EmployeeID UNIQUE(EmployeeId);

这将确保在该表中没有重复的EmployeeId

但是如果表中有一些数据并且已经存在重复的EmployeeId,您将收到错误消息

CREATE UNIQUE INDEX语句终止,因为找到了对象名称“Customers”和索引名称“UQ_EmployeeId”的重复键。重复键值为(“DuplicateValueHere”)。

对于你的问题

有没有更好的办法?

您已经有更好的方法来防止插入重复项。


Create Unique ConstraintsALTER TABLE (Transact-SQL)

© www.soinside.com 2019 - 2024. All rights reserved.