Maison > base de données > tutoriel mysql > Quel est l'équivalent SQL Server du ROWID d'Oracle ?

Quel est l'équivalent SQL Server du ROWID d'Oracle ?

Barbara Streisand
Libérer: 2024-12-25 16:43:14
original
672 Les gens l'ont consulté

What is the SQL Server Equivalent of Oracle's ROWID?

Équivalent du RowID d'Oracle dans SQL Server

La pseudo-colonne ROWID dans Oracle identifie de manière unique chaque ligne d'une table et contient des informations sur son emplacement dans la base de données. Dans SQL Server, l'équivalent le plus proche de ROWID est le rid, qui comporte trois composants : File, Page et Slot.

Pour obtenir le rid, vous pouvez utiliser la colonne virtuelle %%physloc%% non documentée et non prise en charge. , qui renvoie une valeur binaire (8) avec l'ID de page dans les quatre premiers octets, l'ID de fichier dans les deux octets suivants et l'emplacement de l'emplacement dans les deux derniers octets.

Vous pouvez utiliser le Fonctions sys.fn_PhysLocFormatter ou sys.fn_PhysLocCracker pour convertir cette valeur binaire dans un format plus lisible :

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

Notez que SQL Server n'exploite pas le rid dans la requête traitement, donc l'utilisation de %%physloc%% dans une clause WHERE entraînera une table complète scan.

Pour reconvertir les valeurs de fichier, de page et d'emplacement en représentation binaire (8), utilisez :

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

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