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
Barbara Streisandoriginal
2024-12-25 16:43:14606parcourir

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

Sortie :

+--------------------+----------------+
|    %%physloc%%     | File:Page:Slot |
+--------------------+----------------+
| 0x2926020001000000 | (1:140841:0)   |
| 0x2926020001000100 | (1:140841:1)   |
+--------------------+----------------+

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))

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:
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