Heim >Datenbank >MySQL-Tutorial >Was ist das SQL Server-Äquivalent der ROWID von Oracle?

Was ist das SQL Server-Äquivalent der ROWID von Oracle?

Barbara Streisand
Barbara StreisandOriginal
2024-12-25 16:43:14597Durchsuche

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

Äquivalent zur RowID von Oracle in SQL Server

Die ROWID-Pseudospalte in Oracle identifiziert jede Zeile in einer Tabelle eindeutig und enthält Informationen zu ihrer Position in die Datenbank. In SQL Server ist das RID das nächste Äquivalent zu ROWID und besteht aus drei Komponenten: Datei, Seite und Slot.

Um das RID zu erhalten, können Sie die undokumentierte und nicht unterstützte virtuelle Spalte %%physloc%% verwenden , der einen Binärwert (8) mit der Seiten-ID in den ersten vier Bytes, der Datei-ID in den nächsten zwei Bytes und der Slot-Position in den letzten beiden Bytes zurückgibt.

Das ist möglich Verwenden Sie die Funktionen sys.fn_PhysLocFormatter oder sys.fn_PhysLocCracker, um diesen Binärwert in ein besser lesbares Format zu konvertieren:

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

Ausgabe:

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

Beachten Sie, dass SQL Server das Rid nicht nutzt Bei der Abfrageverarbeitung führt die Verwendung von %%physloc%% in einer WHERE-Klausel zu einer vollständigen Tabelle scannen.

Um Datei-, Seiten- und Slot-Werte zurück in die binäre (8)-Darstellung zu konvertieren, verwenden Sie:

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))

Das obige ist der detaillierte Inhalt vonWas ist das SQL Server-Äquivalent der ROWID von Oracle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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