SQL Server の Oracle の RowID に相当します
Oracle の ROWID 疑似列は、テーブル内の各行を一意に識別し、テーブル内のその位置に関する情報を含みます。データベース。 SQL Server では、ROWID に最も近いものは Rid であり、ファイル、ページ、スロットの 3 つのコンポーネントがあります。
RID を取得するには、文書化されておらずサポートされていない %%physloc%% 仮想列を使用できます。 、最初の 4 バイトにページ ID、次の 2 バイトにファイル ID、最後の 2 バイトにスロット位置を含む binary(8) 値を返します。 bytes.
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 はクエリ処理で Ridge を利用しないことに注意してください。 WHERE 句で %%physloc%% を使用すると、テーブル全体のスキャンが行われます。
ファイル、ページ、およびスロットの値を binary(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 中国語 Web サイトの他の関連記事を参照してください。