摘要:全文Copy 自: http://bbs.cnetnews.com.cn/redirect.php?tid=127166&goto=lastpost   SQLServer2000提供了一个读取数据页结构的命令DBCC Page。该命令为非文档化的命令,具体如下:DBCC Page ({dbid|dbname},filenum,pagenum[,printopt])具体参数描述如下:dbid          包含页面的数据库IDdbname    包含页面的数据库的名称filenum      包含页面的文件编号pagenum  文件内的页面printopt    可选的输出选项;选用其中一个值:                  0:默认值,输出缓冲区的标题和页面标题                  1:输出缓冲区的标题、页面标题(分别输出每一行),以及行偏移量表                  2:输出缓冲区的标题、页面标题(整体输出页面),以及行偏移量表                  3:输出缓冲区的标题、页面标题(分别输出每一行),以及行偏移量表;每一行                    后跟分别列出的它的列值要想看到这些输出的结果,还需要设置DBCC TRACEON(3604)。对于表来说,它所在的dbid或者dbname很容易知道,那么它的filenum和pagenum怎么知道呢?其实这个值存在系统表sysindexes的列first中(当indid为0或者1时,indid为0表示该表是一个堆表,没有任何聚集索引,indid为1表示该索引为聚集索引),列first的数据类型为binary(6),它是以16进制的形式储的,需要进行转换。在16进制中,每两个16进制数字表示一个字节,并且是逆序排列的。比如假设一个表的first的值为0xC70000000100,怎么转换呢?因为它是逆序排列的,并且每两个表示一个字节,所以每次都将剩下first值的最后两位移到转换后数据的最后,具体转换步骤如下:步骤      此时的first值                转换后的数据第0步    0xC70000000100 第1步    0xC700000001            00第2步    0xC7000000                0001第3步    0xC70000                  000100第4步    0xC700                      00010000第5步    0xC7                          0001000000第6步   ......[阅读全文]