Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Maklumat Seperti RowID dalam SQL Server?
Mendapatkan Maklumat Seperti RowID dalam SQL Server
Salah satu perbezaan utama antara Oracle dan SQL Server ialah ketiadaan persamaan yang tepat dengan Konsep RowID Oracle. Walau bagaimanapun, terdapat cara untuk mendapatkan maklumat yang serupa dalam SQL Server, terutamanya melalui lajur maya %%physloc%% yang tidak didokumenkan dan tidak disokong.
Memahami %%physloc%%
Lajur maya %%physloc%% mengembalikan nilai binari(8) yang mewakili yang berikut maklumat:
Menukar Nilai Binari kepada Boleh Dibaca Manusia Borang
SQL Server menyediakan dua fungsi berguna untuk menukar nilai perduaan %%physloc%% kepada format yang lebih mudah dibaca:
Contoh Penggunaan
Untuk menunjukkan penggunaan %%physloc%%, pertimbangkan pertanyaan berikut:
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) | +--------------------+----------------+
Menterbalikkan Penukaran
Untuk membalikkan proses penukaran dan mendapatkan binari(8) nilai daripada nilai Fail, Halaman dan Slot yang diketahui, kod berikut boleh digunakan:
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))
Ini fungsi, walaupun berguna, tidak mempunyai kesan langsung pada proses pengoptimuman pertanyaan dalam SQL Server.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Maklumat Seperti RowID dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!