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