2011-05-12 82 views
8

我在SQL Server 2005中有一个外键的表,并且我希望外键是唯一值或为null。我将它设置为一个唯一的键,但它不会让我在同一个表中有多个空值。有可能做我想做的事吗?具有空值的SQL Server 2005唯一键

回答

9

这是一个很长时间抱怨SQL Server的唯一约束/索引。最好的解决办法是创建架构绑定视图,然后把一个唯一索引的列:

Create View dbo.MyUniqueColView 
With SchemaBinding 
As 
Select MyColToBeUnique 
From MyTable 
Where MyColToBeUnique Is Not Null 

GO 

Create Unique Clustered Index IX_MyTable_MyColToBeUnique On MyUniqueColView (MyColToBeUnique) 
0

在SQL Server 2008中,您可以创建在不是空值的filtered index - 不幸的是,这是在2008年发布了新的功能,因此在2005年,你不能够做​​任何事情一样, , 恐怕。

1

你不能在SQL Server 2005中的表级的约束强制执行这一点,但您可以创建定义SELECT Col FROM t WHERE Col IS NOT NULL景色,然后在其上创建一个唯一的聚集索引。

0

总是一个烦恼我的。我更喜欢标准的“其他”解释。

请参阅Creating a unique constraint that ignores nulls in SQL Server。它涵盖了三种不同的方法。

  1. 解决方案1:过滤索引。

    从其他答复来看,这看起来很常见。我还没有尝试过这种方法 - 但它确实需要 SQL Server 2008的

  2. 解决方法2:在计算列约束

    我已经使用这个,和它的工作。然而,可能需要调整关系和/或添加次要非唯一覆盖索引(一个用于唯一约束,一个用于索引覆盖)。

  3. 解决方案3:UDF检查约束(不推荐)

    啊,TSQL的功率(阅读:什么别的处理)。我没有走下这条路。

快乐编码。