在我正在进行的这个项目中,我需要将特定字段设置为唯一的(不是问题!)但是如果该字段为空,我希望忽略约束。在 Sql Server 2008 中,我使用过滤索引,如下所示,但这在 SQL 的早期版本中不可用!
CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC
ON [User] (pinNr)
WHERE UserName IS NOT NULL
但我认为这在 SQL Server 2005 中不可用。事实上,这篇博客文章表明存在使用触发器检查唯一性的解决方法。有没有人有这方面的例子?或者是替代方案?
不幸的是,升级到 SQl Server 2008 不是这个特定客户端的选项!!
实际上,我不得不做一次这样的事情。它涉及创建一个计算列,该列在不是时获取唯一列
NULL
的值和主键的值(使用其他一些逻辑以使其不可能与唯一列上的值发生冲突),并使唯一索引那一栏。您可以在此处查看此示例和触发方法。您可以创建一个视图(其中用户名不为空),然后针对该视图放置一个唯一索引。您永远不需要使用视图,它只是为此而存在。
您还可以使用此技术在多个表中强制执行唯一性,而这通常是不可能的。