Нулевое растровое изображение устанавливается, когда нет пустых столбцов

Я изучаю структуру 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 - Бица
  • 00 - BitsB
  • 0800 - длина Fdata
  • 01000000 - Фиксированные данные (ID = 1)
  • 0300 - количество столбцов
  • 50 - пустое растровое изображение

Почему 50, а не 00? В записи нет значений NULL...

1 ответ

Решение

Правильный ответ был в комментарии, и я проголосовал за него, но у вас все еще есть вопрос, поэтому, возможно, я должен объяснить вам, что это значит.

Три нижних бита равны 0. Остальные биты следует игнорировать.

Если вы расширите 50 в двоичный файл, вы получите 01010000. Единственными интересными битами являются три нижних бита, они соответствуют 3,2,1 столбцам, которые не равны нулю. Остальные биты следует игнорировать, это означает, что серверу известно количество столбцов, равное 3, и в этой маске для него важны только 3 бита. Другие биты не установлены, для этого их следует игнорировать. Они просто содержат мусор.

Другие вопросы по тегам