首頁 >資料庫 >mysql教程 >Oracle ROWID 在 SQL Server 中的等價物是什麼?

Oracle ROWID 在 SQL Server 中的等價物是什麼?

Barbara Streisand
Barbara Streisand原創
2024-12-25 16:43:14593瀏覽

What is the SQL Server Equivalent of Oracle's ROWID?

相當於SQL Server 中Oracle 的RowID

Oracle 中的ROWID 偽列唯一識別表中的每一行,並包含有關其行在資料庫。在SQL Server中,與ROWID最接近的等效項是rid,它由三個組成部分:File、Page和Slot。

要取得rid,可以使用未記錄且不受支援的%%physloc%%虛擬列,它傳回一個二進位(8)值,前四個位元組為頁面ID,接下來的兩個位元組為檔案ID,最後兩個位元組為插槽位置。

您可以使用sys.fn_PhysLocFormatter 或sys.fn_PhysLocCracker 函數將此二進制值轉換為更易讀的格式:

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)   |
+--------------------+----------------+

請注意,SQL Server 不會利用rid在查詢處理中,因此在WHERE 子句中使用%%physloc%% 將導致完整的表scan.

要將檔案、頁面和槽值轉換回二進位 (8) 表示形式,請使用:

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))

以上是Oracle ROWID 在 SQL Server 中的等價物是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn