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 |