我有下表:Customer(Id,Name,employeeID)
该表已经创建并且为空,我不想删除重复数据,我想要的是更改表以确保不会有重复数据
我想使用ALTER并确保employeeID中没有重复项。
将
ALTER TABLE Customers
UNIQUE(employeeID)
ADD CONSTRAINT
有没有更好的办法?
添加唯一约束将确保将来不会添加重复条目:
ALTER TABLE Customers
ADD CONSTRAINT choose_a_name_for_the_constraint UNIQUE (EmployeeID);
你有基本正确的,只是一个关键字订单问题..
如果您正在使用SQLS,还要考虑像这样的简单操作可以通过SSMS中的GUI完成,它将指导该过程。您还可以通过右键单击表并选择“脚本表格为...”将其更改为脚本,以便您可以在其他地方使用它们
根据我的理解,我创建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
。
由于您的表是空的,您可以直接运行
ALTER TABLE Customers
ADD CONSTRAINT UQ_EmployeeID UNIQUE(EmployeeId);
这将确保在该表中没有重复的EmployeeId
。
但是如果表中有一些数据并且已经存在重复的EmployeeId
,您将收到错误消息
CREATE UNIQUE INDEX语句终止,因为找到了对象名称“Customers”和索引名称“UQ_EmployeeId”的重复键。重复键值为(“DuplicateValueHere”)。
对于你的问题
有没有更好的办法?
您已经有更好的方法来防止插入重复项。