加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 为什么UNIQUE束缚只应承一个NULL?

发布时间:2021-03-05 22:36:06 所属栏目:编程 来源:网络整理
导读:从技能上讲,NULL = NULL是False,通过该逻辑,没有NULL便是任何NULL,而且全部NULL都是差异的.这不是体现全部NULL都是独一的,独一索引应该应承恣意数目的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

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读