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 (编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |