不知道如何正确调用标题。但是,我试图了解数据页面的存储方式。我创建了简单的表格:
CREATE TABLE testFix
(
id INT,
v CHAR(10)
);
INSERT INTO dbo.testFix
(
id,
v
)
VALUES
( 1, -- id - int
'asdasd' -- v - varchar(100)
)
GO 2
DBCC TRACEON(3604);
然后我按照以下命令获得了PageFID和PagePID:
DBCC IND(tempdb, testFix, -1)
GO
然后是实际的数据页面:
DBCC PAGE (tempdb, 1, 368, 3)
现在我看到了:
Slot 0 Offset 0x60 Length 21
记录类型= PRIMARY_RECORD记录属性= NULL_BITMAP
记录大小= 21内存转储@ 0x000000287DD7A060
0000000000000000:10001200 01000000 61736461 73642020 20200200 ........ asdasd .. 0000000000000014:00
。插槽0列1偏移0x4长度4长度(物理)4
id = 1
Slot 0 Column 2 Offset 0x8 Length 10 Length(physical)10
v = asdasd
Slot 1 Offset 0x75 Length 21
记录类型= PRIMARY_RECORD记录属性= NULL_BITMAP
记录大小= 21内存转储@ 0x000000287DD7A075
0000000000000000:10001200 01000000 61736461 73642020 20200200 ........ asdasd .. 0000000000000014:00
。插槽1列1偏移0x4长度4长度(物理)4
id = 1
插槽1列2偏移0x8长度10长度(物理)10
v = asdasd
Slot 2 Offset 0x8a Length 21
记录类型= PRIMARY_RECORD记录属性= NULL_BITMAP
记录大小= 21Memory Dump @ 0x000000287DD7A08A
0000000000000000:10001200 01000000 61736461 73642020 20200200 ........ asdasd .. 0000000000000014:00
所以记录的长度是21个字节。但是INT是4个字节而CHAR(10)是10个字节。 4 + 10 = 14。其他7个字节的用途是什么?
答案 0 :(得分:2)
这是数据行的“解剖”
红色表示您缺少7个字节:状态位A(1),状态位B(1),Fdata长度(2),Ncols(2),NullBits(1)