是否可能在唯一约束中忽略Null值?

12 浏览
0 Comments

是否可能在唯一约束中忽略Null值?

这个问题已经有了答案

如何创建一个允许空值的唯一约束?

我的表中有两个字段,IDProvider和Reference。表格如下所示:

ID
MyOwnReference
IDProvider
Reference

如果IDProvider和Reference两个字段都不是空的,我希望约束能够检查是否存在重复项,因为一个提供者不能拥有重复的参考文献。但是,如果其中一个字段为空,我希望避免此项检查,因为我可能知道提供者,但不知道参考文献,或者我可能知道参考文献,但不知道提供者(我承认这可能是一个有点奇怪的情况,如果我知道参考文献,我就必须知道提供者)。但无论如何,我希望能处理这种可能性。

我一直试图创建一个唯一索引,但是当我尝试添加一个IDProvider和Reference都为空的第二条记录时,我会得到一个错误,因为存在一个具有null、null值的索引。

我正在使用Sql Server 2017 express。

另一个选择是有一个[未知]提供者,然后给他分配一个虚拟的参考文献,但是这使我必须为了确定一个不重复的参考文献而添加更多的逻辑到我的应用程序中。

无论如何,我可以接受想法,因为我可能会改变这种行为,如果真的使用带有null值的索引是一个非常糟糕的想法。

谢谢。

admin 更改状态以发布 2023年5月21日
0
0 Comments

您可以在这两个字段上创建唯一的过滤非聚集索引,该索引仅包括这些记录,其中两个字段都已填写:

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

0