SQL Server での RowID のような情報の取得
Oracle と SQL Server の重要な違いの 1 つは、SQL Server と完全に同等なものが存在しないことです。 Oracle の RowID の概念。ただし、SQL Server にも同様の情報を取得する方法があり、主に文書化されておらずサポートされていない %%physloc%% 仮想列を使用します。
%%physloc%% について
%%physloc%% 仮想列は、以下を表す binary(8) 値を返します。情報:
バイナリ値を人間が読める形式に変換するフォーム
SQL Server には、%%physloc%% バイナリ値をより読みやすい形式に変換するための 2 つの便利な関数が用意されています。
使用例
の使用法をデモンストレーションするため%%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 サイトの他の関連記事を参照してください。