Setara dengan RowID Oracle dalam SQL Server
Pseudocolumn ROWID dalam Oracle secara unik mengenal pasti setiap baris dalam jadual dan mengandungi maklumat tentang lokasinya dalam pangkalan data. Dalam SQL Server, setara yang paling hampir dengan ROWID ialah rid, yang mempunyai tiga komponen: Fail, Halaman dan Slot.
Untuk mendapatkan penghapusan, anda boleh menggunakan lajur maya %%physloc%% yang tidak didokumenkan dan tidak disokong , yang mengembalikan nilai binari(8) dengan ID Halaman dalam empat bait pertama, ID Fail dalam dua bait seterusnya dan Lokasi slot dalam dua bait terakhir bait.
Anda boleh menggunakan fungsi sys.fn_PhysLocFormatter atau sys.fn_PhysLocCracker untuk menukar nilai binari ini kepada format yang lebih mudah dibaca:
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
Output:
+--------------------+----------------+ | %%physloc%% | File:Page:Slot | +--------------------+----------------+ | 0x2926020001000000 | (1:140841:0) | | 0x2926020001000100 | (1:140841:1) | +--------------------+----------------+
Perhatikan bahawa SQL Server tidak memanfaatkan penyingkiran dalam pemprosesan pertanyaan, jadi gunakan %%physloc%% dalam klausa WHERE akan menghasilkan imbasan jadual penuh.
Untuk menukar nilai Fail, Halaman dan Slot kembali kepada perwakilan binari(8), gunakan:
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))
Atas ialah kandungan terperinci Apakah SQL Server Setara dengan ROWID Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!