我有一张桌子,上面有一些数据。现在,我想将一个非唯一列设为唯一。 但事实是,我不想删除表中存在的重复数据,但想限制要添加到表中的数据不是唯一的。
要实用: 我有一个表tbl,其中名称,年龄为列。 我表中的数据如下:
name |age
-----------------------
kaushikC |21
mohan |27
kumar |29
mohan |31
karthik |55
karthik |76
现在,我想使名称列唯一,而不删除“ mohan”和“ karthik”的重复条目。
如何写这样的约束
答案 0 :(得分:1)
如果您的表中有一列可以标识您不想更改的记录,例如identity
列或创建日期,则可以在表,在其where
子句中指定该表应仅包括表中的其他记录。
假设您有一个名为identity
的{{1}}列:
id
您可以在此表上创建唯一的过滤索引,该索引仅对id | name |age
-----------------------
1 | kaushikC |21
2 | mohan |27
3 | kumar |29
4 | mohan |31
5 | karthik |55
6 | karthik |76
大于6的行有效:
id
这将使您能够在表上保持其他名称的唯一性-但是,这不会阻止您为现有名称再插入一个重复项-因此您可以插入另一个CREATE UNIQUE INDEX UX_YourTable_Name_WhereIdGraterThanSix
ON YourTable (Name)
WHERE id > 6;
或另一个{{1} }到表格中(但只有一个)。
如果要排除所有重复项,包括现有行的重复项,最好的选择可能是使用mohan
触发器进行插入和更新:
kumar