首先我们来看看这条指令:
DBCC HELP ('?') --mssql sp3帮助
GO
得到如下结果 :

/**//*
checkalloc
checkcatalog
checkconstraints
checkdb
checkfilegroup
checkident
checktable
cleantable
concurrencyviolation
dbreindex
dbrepair
dropcleanbuffers
free
freeproccache
help
indexdefrag
inputbuffer
memusage
newalloc
opentran
outputbuffer
perfmon
pintable
proccache
show_statistics
showcontig
shrinkdatabase
shrinkdb
shrinkfile
sqlperf
textall
textalloc
traceoff
traceon
tracestatus
unpintable
updateusage
useroptions
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/
大家有没有发现并没有dbcc tab 这个命令,奇怪了, 怎么回事,
再来看另一个命令:
DBCC HELP ('free')
GO
--结果
/**//*
free dll_name (FREE)
e.g. DBCC xp_sample (FREE)
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/那我们试试这里的tab看看,是不是意外结果 :
DBCC HELP ('tab')
GO
/**//*
服务器: 消息 8987,级别 16,状态 1,行 1
DBCC 语句 'tab' 没有可用的帮助。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/结果 还真意外,MSSQL无法解释这个命令,
先后运行Dbcc tab 提示:向 DBCC 语句提供的参数数目不正确。,
再试dbcc tab(1) 仍然提示:向 DBCC 语句提供的参数数目不正确。
再试在Dbcc tab(1,1) 终于有结果 出来了,
dbcc tab(1,1)
/**//*
PageFID PagePID IAMFID IAMPID ObjectID IndexID PageType IndexLevel NextPageFID NextPagePID PrevPageFID PrevPagePID
------- ----------- ------ ----------- ----------- ------- -------- ---------- ----------- ----------- ----------- -----------
1 11 NULL NULL 1 1 10 0 0 0 0 0
1 8 1 11 1 0 1 0 1 668 0 0
1 12 1 11 1 1 2 0 0 0 0 0
1 365 1 11 1 0 1 0 1 1092 1 1095
1 369 1 11 1 0 1 0 1 671 1 670
1 373 1 11 1 0 1 0 1 670 1 1091
1 394 1 11 1 0 1 0 1 1094 1 669
1 448 1 11 1 0 1 0 1 1093 1 1088
1 452 1 11 1 0 1 0 1 1090 1 1089
1 664 1 11 1 0 1 0 1 1091 1 1090
1 665 1 11 1 0 1 0 1 1088 1 1092
1 666 1 11 1 0 1 0 1 669 1 1093
1 667 1 11 1 0 1 0 1 1089 1 1094
1 668 1 11 1 0 1 0 1 1095 1 8
1 669 1 11 1 0 1 0 1 394 1 666
1 670 1 11 1 0 1 0 1 369 1 373
1 671 1 11 1 0 1 0 0 0 1 369
1 1088 1 11 1 0 1 0 1 448 1 665
1 1089 1 11 1 0 1 0 1 452 1 667
1 1090 1 11 1 0 1 0 1 664 1 452
1 1091 1 11 1 0 1 0 1 373 1 664
1 1092 1 11 1 0 1 0 1 665 1 365
1 1093 1 11 1 0 1 0 1 666 1 448
1 1094 1 11 1 0 1 0 1 667 1 394
1 1095 1 11 1 0 1 0 1 365 1 668
1 1338 NULL NULL 1 2 10 0 0 0 0 0
1 38 1 1338 1 2 2 0 1 1345 1 1344
1 259 1 1338 1 2 2 0 1 1353 1 1352
1 1344 1 1338 1 2 2 0 1 38 0 0
1 1345 1 1338 1 2 2 0 1 1347 1 38
1 1346 1 1338 1 2 2 1 0 0 0 0
1 1347 1 1338 1 2 2 0 1 1348 1 1345
1 1348 1 1338 1 2 2 0 1 1349 1 1347
1 1349 1 1338 1 2 2 0 1 1350 1 1348
1 1350 1 1338 1 2 2 0 1 1351 1 1349
1 1351 1 1338 1 2 2 0 1 1352 1 1350
1 1352 1 1338 1 2 2 0 1 259 1 1351
1 1353 1 1338 1 2 2 0 0 0 1 259
1 1340 NULL NULL 1 3 10 0 0 0 0 0
1 1339 1 1340 1 3 2 0 1 37 0 0
1 1341 1 1340 1 3 2 0 1 310 1 37
1 1342 1 1340 1 3 2 1 0 0 0 0
1 1343 1 1340 1 3 2 0 0 0 1 310
1 37 1 1340 1 3 2 0 1 1341 1 1339
1 310 1 1340 1 3 2 0 1 1343 1 1341
(所影响的行数为 45 行)
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/中间有二列:objectid,IndexID,
难道是表的ID,
再测试
select object_id('sysobjects'),object_id('syscolumns'),object_id('sysdatabases'),object_id('xp_cmdshell')
/**//*
----------- ----------- ----------- -----------
1 3 30 927342368
(所影响的行数为 1 行)

*/有点门道了吧,估计前是就是dbid了吧
测试:
select db_id('master'),db_id('tempdb'),db_id('pubs')
/**//*
------ ------ ------
1 2 5
(所影响的行数为 1 行)


*/
到此我们来解释一下这个命令吧
--语法:
DBCC TAB (dbid,objectid,outtype)
--参数:
dbid --数据库ID
object_id --对象ID
outtype --输入出类型:猜想的,因为我试了好没有效果,只输出一种缺省的效果 好,我们来测试一下:
select object_id('sysobjects')
select db_id('csdn_test')
/**//*
-----------
1
(所影响的行数为 1 行)
------
8
(所影响的行数为 1 行)
*/
DBCC TAB(8,1, 0 ) --DBCC
/**//*
PageFID PagePID IAMFID IAMPID ObjectID IndexID PageType IndexLevel NextPageFID NextPagePID PrevPageFID PrevPagePID
------- ----------- ------ ----------- ----------- ------- -------- ---------- ----------- ----------- ----------- -----------
1 10 NULL NULL 1 1 10 0 0 0 0 0
1 8 1 10 1 0 1 0 1 165 0 0
1 11 1 10 1 1 2 0 0 0 0 0
1 165 1 10 1 0 1 0 3 71 1 8
1 536 1 10 1 0 1 0 0 0 3 71
3 71 1 10 1 0 1 0 1 536 1 165
1 76 NULL NULL 1 2 10 0 0 0 0 0
1 75 1 76 1 2 2 1 0 0 0 0
1 523 1 76 1 2 2 0 1 525 0 0
1 525 1 76 1 2 2 0 0 0 1 523
1 78 NULL NULL 1 3 10 0 0 0 0 0
1 77 1 78 1 3 2 0 0 0 0 0
(所影响的行数为 12 行)
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
*/



嘿嘿,知道这个命令的意义了吧!
其实这仅是一次误操作带来的意外结果
好啦,今天的课就到儿了,明天见!!!
揭秘DBCC TAB命令
本文通过一系列测试揭示了SQL Server中鲜为人知的DBCC TAB命令的使用方法及意义,详细解析了该命令如何通过数据库ID和对象ID展示表结构信息。
2715

被折叠的 条评论
为什么被折叠?



