关于sql server:是否可以在唯一约束中忽略null?

Is it possible ignore null in unique constraint?

本问题已经有最佳答案,请猛点这里访问。

我的表中有两个字段,IDProvider和引用。表是这样的:

1
2
3
4
ID
MyOwnReference
IDProvider
Reference

我想如果IDProvider和Reference都不为null,则约束应该检查是否存在重复,因为提供者不能有重复的引用。但是,我想避免检查其中至少有一个是否为空。因为我可以知道提供者但不知道引用,或者我可以知道引用但不知道提供者(我接受这可能有点奇怪,如果我知道引用,我必须知道提供者)。但无论如何,我想处理这个可能性。

我试图创建一个唯一的索引,但当我尝试添加IDProvider和Reference为null的第二个记录时,我得到一个错误,该值是重复的,因为存在一个带有null,null值的索引。

我正在使用Sql Server 2017 express。

另一种选择是拥有[Unkown]提供程序并为其分配一个虚拟引用,但这使我向我的应用程序添加更多逻辑以确定它不重复的引用。

无论如何,我可以接受想法,因为我可以改变这种行为,这不是问题,如果真的是一个具有空值的索引,这是一个非常糟糕的主意。

谢谢。


您可以在这两个字段上创建唯一的筛选非聚集索引,其中仅包括填充了两个字段的那些记录:

1
2
create unique nonclustered index IX_UNIQUE_FILTERED on dbo.MyTable(IDProvider, Reference)
where IDProvider is not null and Reference is not null