使其他列数据唯一的约束

时间:2019-03-21 06:37:00

标签: sql sql-server sql-server-2008

我有一张桌子,上面有一些数据。现在,我想将一个非唯一列设为唯一。 但事实是,我不想删除表中存在的重复数据,但想限制要添加到表中的数据不是唯一的。

要实用:  我有一个表tbl,其中名称,年龄为列。  我表中的数据如下:

name      |age
-----------------------
kaushikC  |21
mohan     |27
kumar     |29
mohan     |31
karthik   |55
karthik   |76

现在,我想使名称列唯一,而不删除“ mohan”和“ karthik”的重复条目。

如何写这样的约束

1 个答案:

答案 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