ホームページ > データベース > mysql チュートリアル > SQL Server で RowID のような情報を取得するにはどうすればよいですか?

SQL Server で RowID のような情報を取得するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-03 12:28:48
オリジナル
361 人が閲覧しました

How to Retrieve RowID-Like Information in SQL Server?

SQL Server での RowID のような情報の取得

Oracle と SQL Server の重要な違いの 1 つは、SQL Server と完全に同等なものが存在しないことです。 Oracle の RowID の概念。ただし、SQL Server にも同様の情報を取得する方法があり、主に文書化されておらずサポートされていない %%physloc%% 仮想列を使用します。

%%physloc%% について

%%physloc%% 仮想列は、以下を表す binary(8) 値を返します。情報:

  • ページ ID (最初の 4 バイト)
  • ファイル ID (次の 2 バイト)
  • ページ上のスロットの位置 (最後の 2 バイト)

バイナリ値を人間が読める形式に変換するフォーム

SQL Server には、%%physloc%% バイナリ値をより読みやすい形式に変換するための 2 つの便利な関数が用意されています。

  • sys.fn_PhysLocFormatter: バイナリ値を「ファイル:ページ:スロット」に変換します。 format.
  • sys.fn_PhysLocCracker: バイナリ値を個別のファイル ID、ページ ID、およびスロット変数に変換します。

使用例

の使用法をデモンストレーションするため%%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)   |
+--------------------+----------------+
ログイン後にコピー

変換を反転する

変換を反転するには既知のファイル、ページ、スロットの値から 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))
ログイン後にコピー

この機能は便利ですが、SQL Server のクエリ最適化プロセスには直接影響しません。

以上がSQL Server で RowID のような情報を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート