Ä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!