我有下表: 客户(编号,姓名,员工编号)
该表已创建并且为空,我不想删除重复的数据,我要做的就是更改表以确保没有重复的数据
我想使用ALTER并确保employeeID中没有重复项。
会
ALTER TABLE Customers
UNIQUE(employeeID)
ADD CONSTRAINT
有更好的方法吗?
答案 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”)。
您的问题
有更好的方法吗?
您已经有了防止插入重复项的更好方法。