SQL Server 2005 中可空列的唯一约束

Aim*_*Kai 12 sql-server-2005 sql-server constraint

在我正在进行的这个项目中,我需要将特定字段设置为唯一(不是问题!)但如果该字段为空,我希望忽略约束。在 Sql Server 2008 中,我使用如下所示的过滤索引,但这在早期版本的 SQL 中不可用!

CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC
ON [User] (pinNr)
WHERE UserName IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

但我不认为这在 SQL Server 2005 中可用。事实上,这篇博客文章表明有一种使用触发器来检查唯一性的解决方法。有没有人有这样的例子?或者也许是另一种选择?

不幸的是,升级到 SQL Server 2008 不是这个特定客户端的选项!!

Lam*_*mak 18

实际上,我不得不做一次这样的事情。它涉及创建一个计算列,该列在不存在时采用唯一列NULL的值和主键的值(使用其他一些逻辑使其不可能与唯一列上的值发生冲突),并在上创建唯一索引那个专栏。您可以在此处查看此示例和触发器方法。


Mef*_*eff 7

您可以创建一个视图(其中用户名不为空),然后针对该视图放置一个唯一索引。你永远不需要使用视图,它只是为了这个而存在。

您还可以使用此技术来强制跨多个表的唯一性,而这通常是不可能的。

  • 在这种情况下,尽管唯一的观点是强制执行唯一约束,但这是一种完全有效/常见的方法。 (3认同)
  • 索引视图不需要企业版。但是,它们确实要求您使用 WITH (NOEXPAND) 查询提示来强制标准版查询优化器使用索引视图而不是基础查询。 (2认同)
  • 已编辑以删除有关需要的企业版的错误信息。 (2认同)