在 SQL Server 中检索 RowID 类信息
Oracle 和 SQL Server 之间的主要区别之一是缺乏与Oracle 的 RowID 概念。但是,在 SQL Server 中可以通过多种方式获取类似信息,主要是通过未记录且不受支持的 %%physloc%% 虚拟列。
了解 %%physloc%%
%%physloc%% 虚拟列返回表示以下内容的二进制 (8) 值信息:
将二进制值转换为人类可读的值表单
SQL Server 提供了两个有用的函数,用于将 %%physloc%% 二进制值转换为更易读的格式:
示例用法
要演示 %%physloc%% 的使用,请考虑以下查询:
CREATE TABLE T(X INT); INSERT INTO T VALUES(1),(2) SELECT %%physloc%% AS [%%physloc%%], sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot] FROM T
输出:
+--------------------+----------------+ | %%physloc%% | File:Page:Slot | +--------------------+----------------+ | 0x2926020001000000 | (1:140841:0) | | 0x2926020001000100 | (1:140841:1) | +--------------------+----------------+
反转转换
反转转换过程并获取二进制文件(8 ) 值来自已知的 File、Page 和 Slot 值,以下代码可以是使用:
DECLARE @FileId int = 1, @PageId int = 338, @Slot int = 3 SELECT CAST(REVERSE(CAST(@PageId AS BINARY(4))) AS BINARY(4)) + CAST(REVERSE(CAST(@FileId AS BINARY(2))) AS BINARY(2)) + CAST(REVERSE(CAST(@Slot AS BINARY(2))) AS BINARY(2))
此功能虽然有用,但对 SQL Server 中的查询优化过程没有直接影响。
以上是如何在 SQL Server 中检索类似 RowID 的信息?的详细内容。更多信息请关注PHP中文网其他相关文章!