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!?)