Heim > Datenbank > MySQL-Tutorial > Wie rufe ich RowID-ähnliche Informationen in SQL Server ab?

Wie rufe ich RowID-ähnliche Informationen in SQL Server ab?

Linda Hamilton
Freigeben: 2025-01-03 12:28:48
Original
361 Leute haben es durchsucht

How to Retrieve RowID-Like Information in SQL Server?

Abrufen von RowID-ähnlichen Informationen in SQL Server

Einer der Hauptunterschiede zwischen Oracle und SQL Server ist das Fehlen einer genauen Entsprechung zu Das RowID-Konzept von Oracle. Es gibt jedoch Möglichkeiten, ähnliche Informationen in SQL Server zu erhalten, vor allem über die undokumentierte und nicht unterstützte virtuelle Spalte %%physloc%%.

Grundlegendes zu %%physloc%%

Die virtuelle Spalte %%physloc%% gibt einen Binärwert (8) zurück, der die folgenden Informationen darstellt:

  • Seite ID (erste vier Bytes)
  • Datei-ID (nächste zwei Bytes)
  • Slot-Position auf der Seite (letzte zwei Bytes)

Binärwert konvertieren in für Menschen lesbare Form

SQL Server bietet zwei hilfreiche Funktionen zum Konvertieren der %%physloc%%-Binärdatei Wert in ein besser lesbares Format:

  • sys.fn_PhysLocFormatter: Konvertiert den Binärwert in das Format „File:Page:Slot“.
  • sys.fn_PhysLocCracker: Konvertiert den Binärwert in separate Datei-ID, Seiten-ID und Slot Variablen.

Beispielverwendung

Um die Verwendung von %%physloc%% zu demonstrieren, betrachten Sie die folgende Abfrage:

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
Nach dem Login kopieren

Ausgabe:

+--------------------+----------------+
|    %%physloc%%     | File:Page:Slot |
+--------------------+----------------+
| 0x2926020001000000 | (1:140841:0)   |
| 0x2926020001000100 | (1:140841:1)   |
+--------------------+----------------+
Nach dem Login kopieren

Umkehren der Konvertierung

Um den Konvertierungsprozess umzukehren und den Binärwert (8) aus bekannten Datei-, Seiten- und Slot-Werten zu erhalten, kann der folgende Code verwendet werden:

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))
Nach dem Login kopieren

Dies Die Funktionalität ist zwar nützlich, hat aber keinen direkten Einfluss auf den Abfrageoptimierungsprozess in SQL Server.

Das obige ist der detaillierte Inhalt vonWie rufe ich RowID-ähnliche Informationen in SQL Server ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage