首页 > 代码库 > Microsoft SQL Server 2008/2012 Internals 一处疑问
Microsoft SQL Server 2008/2012 Internals 一处疑问
Kalen Delaney 等著的深入解析 Microsoft SQL Server 系列,享有盛誉,深入研读,是管窥深奥复杂之 SQL Server 的阶梯与门径。手头有 Microsoft SQL Server 2008 Internals 影印版,也有 Microsoft SQL Server 2012 Internals 电子版,相互参照,辅之以实际演练,受益匪浅。
但有一处,与实际演练情形有所出入。Microsoft SQL Server 2008/2012 Internals 在 272 页有这样一段:
这段文字,2008 版与 2012 版完全一样。文中说,如果向表中插入一行全空记录(除主键之外,其他可空的 varchar 字段全为 NULL):
INSERT INTO NullVarchar (col1,col2,col3,col4,col5,col6,col7,col8,col9,col10)
VALUES (NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
则通过 DBCC PAGE 命令导出的数据表中的实际存储,其 NULL bitmap 域为全零。而实际的导出结果如下(SQL Server 2012 Express):
其中,NULL bitmap 域的值为 0xfe07,实际等于 0x07fe = 0000011111111110。此值的意义为:除第一个字段(主键字段 id)不为空外,其余 10 个字段全为空。
而 Status Bits A = 0x10 = 00010000,其中 bit 4 = 1,说明记录中含有 NULL bitmap 域。而 bit 5 = 0 则表示记录中没有可变长度字段,也就是说,因为所有的可变长度字段都为空,则 SQL Server 索性就不存储这些字段了。
Kalen Delaney 的书 Microsoft SQL Server 2008/2012 Internals 中,NULL bitmap 域为什么是全零?
Microsoft SQL Server 2008/2012 Internals 一处疑问
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。