我的表中有2个字段,即IDProvider和引用。表格是这样的:
ID
MyOwnReference
IDProvider
Reference
我希望如果IDProvider和Reference都不为null,则约束应检查是否存在重复项,因为提供程序不能具有重复的引用。但是,我想避免检查其中至少一个是否为空。因为我知道提供者但不知道引用,或者我知道引用但不知道提供者(我接受这可能有点奇怪,如果我知道引用,则必须知道提供者)。但是无论如何,我想处理这种可能性。
我尝试创建唯一索引,但是当我尝试添加IDProvider和Reference为null的第二条记录时,由于存在一个具有null值和null值的索引,因此我得到一个错误,该值是重复的。
我正在使用Sql Server 2017 Express。
另一种选择是拥有[未知]提供程序并为他分配一个虚拟引用,但这使我可以在应用程序中添加更多逻辑来确定不是重复的引用。
无论如何,我都可以接受想法,因为我可以改变这种行为,这不是问题,如果确实具有空值的索引是一个非常糟糕的主意。
谢谢。
答案 0 :(得分:2)
您可以在这两个字段上创建唯一的过滤式非聚集索引,该索引仅包括同时填充两个字段的那些记录:
create unique nonclustered index IX_UNIQUE_FILTERED on dbo.MyTable(IDProvider, Reference)
where IDProvider is not null and Reference is not null