Maison > base de données > tutoriel mysql > Comment récupérer des informations de type RowID dans SQL Server ?

Comment récupérer des informations de type RowID dans SQL Server ?

Linda Hamilton
Libérer: 2025-01-03 12:28:48
original
399 Les gens l'ont consulté

How to Retrieve RowID-Like Information in SQL Server?

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 :

  • ID de la page (premier quatre octets)
  • ID de fichier (deux octets suivants)
  • Emplacement de l'emplacement sur la page (deux derniers octets)

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 :

  • sys.fn_PhysLocFormatter : Convertit la valeur binaire au format "File:Page:Slot".
  • sys .fn_PhysLocCracker : Convertit la valeur binaire en ID de fichier, ID de page et emplacement distincts variables.

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
Copier après la connexion

Sortie :

+--------------------+----------------+
|    %%physloc%%     | File:Page:Slot |
+--------------------+----------------+
| 0x2926020001000000 | (1:140841:0)   |
| 0x2926020001000100 | (1:140841:1)   |
+--------------------+----------------+
Copier après la connexion

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))
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal