0

我正在学习 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

  • 30 - 比特A
  • 00 - 位 B
  • 0800 - F数据长度
  • 01000000 - 固定数据 (ID = 1)
  • 0300 - 列数
  • 50 - 空位图

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

4

1 回答 1

1

正确的答案在评论中,我投了赞成票,但是您仍然有问题,所以也许我应该向您解释这是什么意思。

低三位为 0。其他位应忽略。

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

于 2017-07-21T11:07:17.013 回答