我正在使用SQL Server 2005.我想将列中的值限制为唯一,同时允许NULLS.
我当前的解决方案涉及视图上的唯一索引,如下所示:
CREATE VIEW vw_unq WITH SCHEMABINDING AS SELECT Column1 FROM MyTable WHERE Column1 IS NOT NULL CREATE UNIQUE CLUSTERED INDEX unq_idx ON vw_unq (Column1)
有更好的想法吗?
使用SQL Server 2008,您可以创建筛选索引:http://msdn.microsoft.com/en-us/library/cc280372.aspx.(我看到西蒙补充说这是一个评论,但认为它应该得到它自己的答案,因为很容易错过评论)
另一种选择是检查唯一性的触发器,但这可能会影响性能.
计算出的列技巧被广泛称为"nullbuster"; 我的笔记记录了Steve Kass:
CREATE TABLE dupNulls ( pk int identity(1,1) primary key, X int NULL, nullbuster as (case when X is null then pk else 0 end), CONSTRAINT dupNulls_uqX UNIQUE (X,nullbuster) )
很确定你不能这样做,因为它违反了独特的目的.
然而,这个人似乎有一个体面的工作:http: //sqlservercodebook.blogspot.com/2008/04/multiple-null-values-in-unique-index-in.html