Sql server 2005 SQL Server 2005具有空值的唯一密钥

Sql server 2005 SQL Server 2005具有空值的唯一密钥,sql-server-2005,unique-key,Sql Server 2005,Unique Key,我在SQLServer2005中有一个带有外键的表,我希望该外键为唯一值或null。我已经将其设置为唯一键,但它不允许在同一个表中有多个null。有可能做到我想要的吗?在SQL Server 2008中,您可以在不为null的值上创建一个值-不幸的是,这是2008版本中的一个新功能,因此在2005年,恐怕您无法执行类似的操作。这是对SQL Server独特约束/索引的长期抱怨。最好的解决方案是使用schemabinding创建一个视图,然后在该列上放置一个唯一的索引: Create View d

我在SQLServer2005中有一个带有外键的表,我希望该外键为唯一值或null。我已经将其设置为唯一键,但它不允许在同一个表中有多个null。有可能做到我想要的吗?

在SQL Server 2008中,您可以在不为null的值上创建一个值-不幸的是,这是2008版本中的一个新功能,因此在2005年,恐怕您无法执行类似的操作。

这是对SQL Server独特约束/索引的长期抱怨。最好的解决方案是使用schemabinding创建一个视图,然后在该列上放置一个唯一的索引:

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 )

在SQL Server 2005中,您无法使用表级约束强制执行此操作,但您可以创建一个定义为“从t中选择Col,其中Col不为NULL”的视图,然后在该视图上创建一个唯一的聚集索引。

始终是我的烦恼。我更喜欢标准的“其他”解释

看。它包括三种不同的方法

  • 解决方案1:过滤索引

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

  • 解决方案2:计算列上的约束

    我用过这个,它确实有用。但是,可能需要调整关系和/或添加辅助非唯一覆盖索引(一个用于唯一约束,一个用于索引覆盖)

  • 解决方案3:自定义项检查约束(不推荐)

    啊,TSQL的力量(阅读:其他需要处理的东西)。我没有走这条路

  • 快乐编码