可空列的 UNIQUE 约束的替代方法

Alternative to UNIQUE contstraint for nullable columns

SQL 服务器允许您应用 UNIQUE 约束,但它的行为很奇怪:在这样的列中不能有多个 NULL

我对 NULL 的含义及其正常行为以及其他 DMBS 产品的工作方式的解读是 NULL 应该被忽略。相反,它似乎是被比较的,因此多个 NULL 被视为重复项。

我认为这与 NULL 的正常行为相反,也是不幸的。例如,应该可以表明移动 phone 号码 如果已知 ,是唯一的。

如果是这样,我们如何定义 UNIQUE 列, 允许多个 NULL

在 SQL 服务器 2008 和更新版本中,您可以创建 过滤索引 ,例如排除 NULL 值:

CREATE NONCLUSTERED UNIQUE INDEX IX_SomeName
ON dbo.YourTableName(Columns)
WHERE Column1 IS NOT NULL