我有一个表,当前在列中有重复的值.
我可以创建一个不检查现有合规性的UNIQUE吗?
我尝试过使用NOCHECK但是没有成功.
在这种情况下,我有一个表将许可信息与“CompanyName”联系起来
编辑:具有相同“CompanyName”的多行是错误数据,但我们目前无法删除或更新这些重复项.一种方法是让INSERT使用一个存储过程,这个存储过程会因重复而失败……如果有可能让sql自己检查唯一性,那就更好了.
公司名称查询此数据.对于少数现有的重复项,这将意味着返回并显示多行…虽然这是错误的,但在我们的用例中是可以接受的.目标是在将来防止它.从评论中我可以看出,我必须在存储过程中执行此逻辑.
解决方法
答案是肯定的.您可以使用筛选索引执行此操作(有关文档,请参阅
here).
例如,你可以这样做:
create unique index t_col on t(col) where id > 1000;
这将仅在新行上创建唯一索引,而不是在旧行上创建.这种特殊的表述将允许具有现有值的重复.
如果您只有少量重复项,您可以执行以下操作:
create unique index t_col on t(col) where id not in (<list of ids for duplicate values here>);