我有一个在SQL Server 2005上运行的旧系统。
当前表只有日期列YYYYMMDD,它缺少运行序列号和时间。
可以选择a表并按时间顺序排序吗?或者换句话说,对返回结果进行排序,并根据记录的创建日期和时间对记录进行排序。
发布于 2012-01-11 15:01:20
如果您没有任何有效的时间信息或其他信息-比如未修改的向量自动编号(IDENTITY) -那么一般的答案是NO
而不是
关键在于细节--这取决于你使用的数据库引擎。
发布于 2016-01-30 04:02:11
只是为了能帮助其他人。(我意识到该操作提到了MSSQL 2005)
在SQL2008和更高版本中,您可以使用%%physloc%%虚拟列来执行此操作。这是没有文档的,也是不受支持的。然而,它已经被证明在许多情况下是有帮助的。
%%physloc%%中的十六进制值不仅表示文件号和页号;它们还指定页中的槽号。然而,编码并不是真正的人类可读的。
以下函数可用于理解此虚拟列中的值。
1. sys.fn_PhysLocFormatter函数
此函数将%%physloc%%返回的十六进制值转换为人类可读的格式。你可以这样使用它:
SELECT *,sys.fn_PhysLocFormatter(%%physloc%%) AS PLF
FROM dbo.tst AS T
ORDER BY PLF;此函数的输出格式为(FileNumber:PageNumber:SlotNumer)。以下是上述查询的输出:

2. sys.fn_PhysLocCracker函数
这是一个表值函数,您必须使用CROSS APPLY语句在查询中调用它:
SELECT * FROM dbo.tst AS T
CROSS APPLY sys.fn_PhysLocCracker(%%physloc%%) AS FPLC
ORDER BY FPLC.file_id, FPLC.page_id, FPLC.slot_id;它返回三列:file_id、page_id和slot_id。与您在上一个示例中看到的表一起使用,输出如下所示:

参考文献:
Where are my Rows? – Using the %%physloc%% Virtual Column
SQL Server - Find Physical Location of Records
SQL Server 2008: New (undocumented) physical row locator function
https://stackoverflow.com/questions/8815327
复制相似问题