【问题标题】:How to ensure that there are no duplicates in field? MS SQL Server 2014如何确保字段中没有重复项?微软 SQL 服务器 2014
【发布时间】:2019-09-19 20:08:27
【问题描述】:

我有下表: 客户(ID、姓名、员工 ID)

表已经创建并且是空的,我不想删除重复数据,我只想ALTER表以确保不会有重复数据

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

ALTER TABLE Customers
UNIQUE(employeeID)
ADD CONSTRAINT

有没有更好的办法?

【问题讨论】:

  • 你能告诉我为什么投反对票,这样我就可以编辑我的问题。
  • 不是我的 DV,但目前尚不清楚您是要对包含现有数据的表进行重复数据删除,还是要配置一个空表,这样它就不能在特定列中插入重复项
  • 为什么客户表会有员工 ID 列?更不用说一个独特的员工列——这意味着您需要与客户一样多的员工(员工 ID 是某种“客户的客户经理”)?
  • @CaiusJard 非常感谢。就是这样给我的。他们告诉我,我必须确保在该领域不会有重复。考虑到表是空的
  • 如果您的表中已经有重复项,则创建唯一约束将不起作用。您需要创建自定义check constraints。或者您可以创建一些插入触发器,它将检查添加数据的唯一性。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案3】:

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

    ALTER TABLE Customers
    ADD CONSTRAINT UQ_EmployeeID UNIQUE(EmployeeId);
    

    这将确保不会在该表中添加重复的EmployeeId

    但是如果表中有一些数据并且已经有重复的EmployeeId你会得到一个错误信息

    CREATE UNIQUE INDEX 语句终止,因为发现对象名称“客户”和索引名称“UQ_EmployeeId”的重复键。重复键值为 ("DuplicateValueHere")。

    关于你的问题

    有没有更好的办法?

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


    Create Unique ConstraintsALTER TABLE (Transact-SQL)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      相关资源
      最近更新 更多