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

时间:2019-05-01 07:58:46

标签: sql sql-server tsql sql-server-2014

我有下表: 客户(编号,姓名,员工编号)

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

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

ALTER TABLE Customers
UNIQUE(employeeID)
ADD CONSTRAINT

有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

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

ALTER TABLE Customers
ADD CONSTRAINT choose_a_name_for_the_constraint UNIQUE (EmployeeID);   

您基本上是对的,只是关键字顺序问题。

如果您正在使用SQLS,还请考虑可以通过SSMS中的GUI来完成此类微不足道的操作,它将指导该过程。您还可以通过右键单击表格并选择“ Script Table As ...”来将更改变成脚本,以便在其他地方使用它们

答案 1 :(得分: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

答案 2 :(得分:1)

由于表为空,因此可以直接运行

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)