Heim >Datenbank >MySQL-Tutorial >Wie rufe ich RowID-ähnliche Informationen in SQL Server ab?
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:
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:
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
Ausgabe:
+--------------------+----------------+ | %%physloc%% | File:Page:Slot | +--------------------+----------------+ | 0x2926020001000000 | (1:140841:0) | | 0x2926020001000100 | (1:140841:1) | +--------------------+----------------+
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))
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!