SQL Serverでは、tinyintが9Bの行に格納されているのはなぜですか。何らかの理由で、NULLビットマップマスクの最後に追加の1バイトがあるようです。
tempdbを使用します。
行く
CREATE TABLE TBL
(
i TINYINT NOT NULL
);
行く
tblに挿入(i)
値(1);
行く
DBCC IND( 'tempdb'、 'tbl'、-1);
行く
DBCC TRACEON(3604); -ページダンプはコンソールに移動します
行く
DBCC PAGE( 'tempdb'、1,168,3);
行く
結果(DBCC PAGEの最下位バイトが最初に表示されるため、バイトを反転しました):
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!?)