当没有空列时设置空位图

Null bitmap is set when there is no null columns

我正在学习 PAGE 结构,目前我被困在 NULL 位图上。

create table dbo.ro
(
ID int not null,
Col1 varchar(8000) null,
Col2 varchar(8000) null
);
insert into dbo.ro(ID, Col1, Col2) values
(1,replicate('a',8000),replicate('b',8000));

所以目前没有NULL值,让我们看看DBCC信息:

DBCC IND(test, 'ro', 1);
DBCC PAGE('test',1, 408,3);

所以我对以下部分感兴趣 30000800 01000000 03005002

为什么是 50 而不是 00?记录中没有 NULL 值 ...

正确答案在评论中,我点赞了,但你还有问题所以也许我应该解释一下它是什么意思。

The bottom three bits are 0. The other bits should be ignored.

如果将 50 展开为二进制,则得到 01010000。 唯一感兴趣的位是 底部的三位 ,它们对应于不为空的 3、2、1 列。 应该忽略其他位意味着服务器知道列数,它是 3,它只关心这个掩码中的 3 位。其他位没有设置,因为它们应该被忽略。它们只是包含一个垃圾。