ホームページ >データベース >mysql チュートリアル >Oracle の ROWID に相当する SQL Server は何ですか?

Oracle の ROWID に相当する SQL Server は何ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-25 16:43:14606ブラウズ

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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。