我在SQL Server 2005中有一个外键的表,并且我希望外键是唯一值或为null。我将它设置为一个唯一的键,但它不会让我在同一个表中有多个空值。有可能做我想做的事吗?具有空值的SQL Server 2005唯一键
8
A
回答
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:过滤索引。
从其他答复来看,这看起来很常见。我还没有尝试过这种方法 - 但它确实需要 SQL Server 2008的。
解决方法2:在计算列约束
我已经使用这个,和它的工作。然而,可能需要调整关系和/或添加次要非唯一覆盖索引(一个用于唯一约束,一个用于索引覆盖)。
解决方案3:UDF检查约束(不推荐)
啊,TSQL的功率(阅读:什么别的处理)。我没有走下这条路。
快乐编码。
相关问题
- 1. 在SQL Server中创建具有非唯一列的外键
- 2. 更改SQL Server 2005中的主键值
- 3. 如何在SQL Server 2005中设置唯一键。
- 4. SQL Server的唯一值
- 5. 具有唯一值的SQL Server COUNT查询
- 6. SQL Server 2005导入向导和空值
- 7. SQL Server生成唯一值
- 8. SQL Server创建具有列唯一不为空且不为空的表(检查)
- 9. SQL Server:批量加载的唯一键
- 10. SQL Server 2005外键级联
- 11. 唯一键与SQL Server 2008上的唯一索引
- 12. 具有唯一值的列
- 13. Sql Server唯一键也是索引吗?
- 14. sql server 2005:值截断
- 15. SQL Server CE nvarchar具有结尾空白的外键
- 16. SQL Server 2005 - 级联删除的外键
- 17. Sql Server 2005上的GetOleDbSchemaTable外键
- 18. 做复合键中的所有属性具有唯一值
- 19. 带命名空间的SQL Server 2005 XML
- 20. SQL Server 2005的性能和空白
- 21. 检查只有一个值的SQL Server 2005
- 22. SQL - 需要复制行但具有唯一的主键
- 23. SQL Server唯一列ID的
- 24. 非空的唯一键轨
- 25. 检查唯一键组合或没有在SQL Server
- 26. SQL:选择具有唯一值但所有列的行
- 27. SQL Server 2008,SQL Server 2005
- 28. SQL Server 2008到SQL Server 2005
- 29. 如何在SQL Server 2005中创建复合唯一约束
- 30. SQL Server 2005如何创建唯一约束?