相當於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中文網其他相關文章!