我有一个在SQL Server 2005上运行的Legacy系统。
当前表只有日期列YYYYMMDD,它缺少正在运行的序列号和时间。
是否可以按时间顺序选择表格和顺序?换句话说,根据记录的创建日期和时间对记录的返回结果进行排序。
答案 0 :(得分:1)
如果您没有任何有效的时间信息或其他信息 - 例如未修改的矢量自动编号(IDENTITY) - 那么一般答案是否
<强> BUT 强>
魔鬼在细节中 - 它取决于你使用的数据库引擎。
答案 1 :(得分:0)
这样可以帮助其他人。 (我意识到OP提到了MSSQL 2005)
在SQL 2008及更高版本中,您可以使用%%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