sql-server – 为什么UNIQUE约束只允许一个NULL?
|
从技术上讲,NULL = NULL是False,通过该逻辑,没有NULL等于任何NULL,并且所有NULL都是不同的.这不是暗示所有NULL都是唯一的,唯一索引应该允许任意数量的NULL吗? 解决方法为什么这样工作?因为回过头来的时候,有人在不知道或不关心标准说什么的情况下作出了设计决定(毕竟,我们确实有各种奇怪的行为与NULL,并且可以随意胁迫不同的行为).该决定规定,在这种情况下,NULL = NULL.这不是一个非常明智的决定.他们应该做的是使默认行为符合ANSI标准,如果他们真的想要这种特殊行为,允许它通过一个DDL选项,如WITH CONSIDER_NULLS_EQUAL或WITH ALLOW_ONLY_ONE_NULL. 当然,后见之明是20/20. 无论如何,我们现在有一个解决方法,即使它不是最干净或最直观的. 通过创建唯一的筛选索引,可以在SQL Server 2008及更高版本中获得正确的ANSI行为. CREATE UNIQUE INDEX foo ON dbo.bar(key) WHERE key IS NOT NULL; 这允许多个NULL值,因为这些行完全不在重复检查中.如果允许多个NULL(特别是当它不是索引中的唯一列,它具有INCLUDE列等)时,这将最终成为比整个表组成的索引更小的索引.但是,您可能希望了解筛选索引的一些其他限制: > How filtered indexes could be a more powerful feature (编辑:海洋资讯信息网_我爱站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 当div设置contentEditable=true时,重置其内容后无法光标定位
- sql – 深度嵌套的子查询因子分解(CTE)的性能降低
- ibm-domino – Domino Admin:如何从Domino控制台或数据库中
- sql-server – 我的SQL Server是否已修补?
- sql – 具有动态文件名的COPY
- sql-server – 使用LEFT JOIN或NOT EXISTS之间的最佳实践
- haskell – 如何在Yesod应用程序中的GHCi中执行数据库查询
- 搜索 – 像关系数据库一样使用Lucene
- tsql – 如何使用T-SQL生成Mandelbrot?
- sql-server – 何时使用TINYINT over INT?

