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