標籤:blog http os ar sp 資料 div 2014 log
Kalen Delaney 等著的深入解析 Microsoft SQL Server 系列,享有盛譽,深入研讀,是管窺深奧複雜之 SQL Server 的階梯與門徑。手頭有
Microsoft SQL Server 2008 Internals 影印版,也有
Microsoft SQL Server 2012 Internals 電子版,相互參照,輔之以實際演練,受益匪淺。 但有一處,與實際演練情形有所出入。Microsoft SQL Server 2008/2012 Internals 在 272 頁有這樣一段: 這段文字,2008 版與 2012 版完全一樣。文中說,如果向表中插入一行全空記錄(除主鍵之外,其他可空的 varchar 欄位全為 NULL): INSERT INTO NullVarchar (col1,col2,col3,col4,col5,col6,col7,col8,col9,col10)VALUES (NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); 則通過 DBCC PAGE 命令匯出的資料表中的實際儲存,其 NULL bitmap 域為全零。而實際的匯出結果如下(SQL Server 2012 Express): 其中,NULL bitmap 域的值為 0xfe07,實際等於 0x07fe = 0000011111111110。此值的意義為:除第一個欄位(主鍵欄位 id)不為空白外,其餘 10 個欄位全為空白。 而 Status Bits A = 0x10 = 00010000,其中 bit 4 = 1,說明記錄中含有 NULL bitmap 域。而 bit 5 = 0 則表示記錄中沒有可變長度欄位,也就是說,因為所有的可變長度欄位都為空白,則 SQL Server 索性就不儲存這些欄位了。 Kalen Delaney 的書 Microsoft SQL Server 2008/2012 Internals 中,NULL bitmap 域為什麼是全零?
Microsoft SQL Server 2008/2012 Internals 一處疑問