在SQL Server 2005里可以通过%%lockress%%得到数据行对应的物理路径信息,在SQL Server2008里还可以通过%%physloc%% 得到,用sys.fn_PhysLocFormatter 将得到的binary数据转换后就是%%lockress%% 的值,但是,这几个在MSDN里都没有介绍.

%%lockress%% 得到值包含了3部分:文件编号,页编号和位置编号,并以冒号分隔.

select *,%%lockres%% as phys from dbTest

得到的结果是:

id          name       phys
----------- ---------- --------------------------------
1           A          1:77:0
2           B          1:77:1
3           C          1:77:2

在SQL Server2008里执行

select *,%%physloc%% as phys from dbTest

得到的结果是:

id          name       phys
----------- ---------- ------------------
1           A          0x7300000001000000
2           B          0x7300000001000100
3           C          0x7300000001000200

在SQL Server2008里执行

 select *,sys.fn_PhysLocFormatter(%%physloc%%)  as physfrom dbTest 

得到的结果是:

id          name       phys
----------- ---------- ----------------------------
1           A          (1:115:0)
2           B          (1:115:1)
3           C          (1:115:2)

因为SQL Sever2005和SQL Server2008在不同的机器上,所以得到的物理信息是不一样的,得到的这个信息,相当于是一张表的一个隐藏的唯一键列,所以通过这个可以很方便的处理一些问题,比如删除没有主键表里的重复数据,但是MSDN里没有相关的说明,所以使用时要考虑一些风险.

posted on 2011-03-19 17:40  空空儿  阅读(1218)  评论(1编辑  收藏  举报