Maison >base de données >tutoriel mysql >Quel est l'équivalent SQL Server du ROWID d'Oracle ?
É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!