我的表中有 2 个字段,IDProvider 和引用。表是这样的:
ID
MyOwnReference
IDProvider
Reference
Run Code Online (Sandbox Code Playgroud)
我希望如果 IDProvider 和 Reference 都不为空,则约束应该检查是否有重复,因为提供者不能有重复的引用。但是,如果其中至少一个为空,我想避免检查。因为我可以知道提供者但不知道参考,或者我可以知道参考但不知道提供者(我接受这可能有点奇怪,如果我知道参考,我必须知道提供者)。但无论如何,我想处理这种可能性。
我试图创建一个唯一索引,但是当我尝试添加第二条记录时,IDProvider 和 Reference 为空,我收到一个错误,该值是重复的,因为存在一个具有空值的索引,空值。
我正在使用 Sql Server 2017 express。
另一种选择是拥有一个 [Unkown] 提供者并为他分配一个虚拟引用,但这让我向我的应用程序添加更多逻辑来确定它不是重复的引用。
无论如何,我可以接受想法,因为我可以改变这种行为,这不是问题,如果真的是一个带有空值的索引,这是一个非常糟糕的主意。
谢谢。
您可以在这两个字段上创建唯一的过滤非聚集索引,其中仅包括那些两个字段都已填充的记录:
create unique nonclustered index IX_UNIQUE_FILTERED on dbo.MyTable(IDProvider, Reference)
where IDProvider is not null and Reference is not null
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1711 次 |
| 最近记录: |