是否可以在列中强制执行唯一值,不包括空值?

Sha*_*ehr 5 sql-server sql-server-2012

我有一个业务要求在TableA引用上有一个 FK 字段TableB。如果 中有一个值TableBID,它应该是唯一的,但它不是强制性的,因此可能会有多个值为空的记录。

是否可以使用索引或约束以某种方式在数据库级别强制执行这种类型的唯一性?

Mar*_*ith 9

您可以创建一个唯一的过滤索引,如下所示。

CREATE UNIQUE NONCLUSTERED INDEX IX ON TableA(TableBID) WHERE TableBID IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

对于过滤索引支持之前的 SQL Server 版本(2008 年之前),请参阅此相关问题