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


12

在这个我正在从事的项目中,我需要将一个特定的字段设置为唯一(不是问题!),但是如果该字段为null,则希望忽略约束。在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!

Answers:


18

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


7

您可以创建一个视图(用户名不为null的视图),然后对该视图添加唯一索引。您将不需要使用视图,它仅为此存在。

您还可以使用此技术在多个表之间实施唯一性,而在通常情况下是不可能的。


2
索引视图不需要企业版。但是,它们确实要求您使用WITH(NOEXPAND)查询提示来强制标准版查询优化器使用索引视图而不是基础查询。
耶利米·佩斯卡

3
在这种情况下,尽管视图的唯一要点是强制执行唯一约束,但这是一种完全有效/通用的方法。
马丁·史密斯

2
编辑以删除有关所需企业版的错误信息。
Meff

@Meff感谢您抽出宝贵的时间在此处回复评论-我希望您对这个网站不会感到陌生:您可能对这些问题感兴趣:)
杰克说,请尝试topanswers.xyz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.