En SQL Server, ¿por qué se almacena un tinyint con 9B en la fila? Por alguna razón, parece haber un byte adicional al final de la máscara de mapa de bits NULL.
USE tempdb;
VAMOS
CREAR TABLA tbl
(
i TINYINT NO NULL
);
VAMOS
INSERTAR EN tbl (i)
VALORES (1);
VAMOS
DBCC IND ('tempdb', 'tbl', - 1);
VAMOS
DBCC TRACEON (3604); - El volcado de página irá a la consola
VAMOS
PÁGINA DBCC ('tempdb', 1,168,3);
VAMOS
Resultados (invertí los bytes debido a que DBCC PAGE muestra el byte menos significativo primero):
Record Size = 9B
10000500 01010000 00
TagA = 0x10 = 1B
TagB = 0x00 = 1B
Null Bitmap Offset = 0x0005 = 2B
Our integer column = 0x01 = 1B
Column Count = 0x0001 = 2B
NULL Bitmap = 0x0000 = 2B (what!?)