Récupération d'informations de type RowID dans SQL Server
L'une des distinctions clés entre Oracle et SQL Server est l'absence d'équivalent exact à Le concept RowID d'Oracle. Cependant, il existe des moyens d'obtenir des informations similaires dans SQL Server, principalement via la colonne virtuelle %%physloc%%, non documentée et non prise en charge.
Comprendre %%physloc%%
La colonne virtuelle %%physloc%% renvoie une valeur binaire(8) représentant les informations suivantes :
Conversion de la valeur binaire en humain- Formulaire lisible
SQL Server fournit deux fonctions utiles pour convertir la valeur binaire %%physloc%% dans un format plus lisible :
Exemple d'utilisation
Pour démontrer l'utilisation de %%physloc%%, considérez la requête suivante :
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
Sortie :
+--------------------+----------------+ | %%physloc%% | File:Page:Slot | +--------------------+----------------+ | 0x2926020001000000 | (1:140841:0) | | 0x2926020001000100 | (1:140841:1) | +--------------------+----------------+
Inverser le Conversion
Pour inverser le processus de conversion et obtenir la valeur binaire (8) à partir des valeurs connues de fichier, de page et d'emplacement, le code suivant peut être utilisé :
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))
Ceci la fonctionnalité, bien qu'utile, n'a aucun impact direct sur le processus d'optimisation des requêtes dans SQL Server.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!