Partager via


Implémentation de l'attribut IDENTITY dans une table Memory-Optimized

IDENTITY(1, 1) est pris en charge sur une table optimisée pour la mémoire. Toutefois, les colonnes d’identité avec définition d’IDENTITY(x, y) où x != 1 ou y != 1 ne sont pas prises en charge sur les tables optimisées en mémoire. La solution de contournement pour les valeurs IDENTITY utilise l’objet SEQUENCE (Sequence Numbers).

Commencez par supprimer la propriété IDENTITY de la table que vous convertissez en In-Memory OLTP. Ensuite, définissez un nouvel objet SEQUENCE pour la colonne de la table. Les objets SEQUENCE en tant que colonnes d’identité s’appuient sur la possibilité de créer des valeurs DEFAULT pour les colonnes qui utilisent la syntaxe NEXT VALUE FOR pour obtenir une nouvelle valeur d’identité. Étant donné que les DEFAULTs ne sont pas pris en charge dans In-Memory OLTP, vous devez transmettre la valeur SEQUENCE nouvellement générée à l’instruction INSERT ou à une procédure stockée compilée en mode natif qui effectue l’insertion. L’exemple suivant illustre ce modèle.

-- Create a new In-Memory OLTP table to simulate IDENTITY insert  
-- Here the column C1 was the identity column in the original table  
--  
create table T1  
(  
  
[c1] integer not null primary key T1_c1 nonclustered,  
[c2] varchar(32) not null,  
[c3] datetime not null  
  
) with (memory_optimized = on)  
go  
  
-- This is a sequence provider that will give us values for column [c1]  
--  
create sequence usq_SequenceForT1 as integer start with 2 increment by 1  
go  
  
--   insert a sample row using the sequence  
--   note that a new value needs to be retrieved form   
--   the sequence object for every insert  
--  
declare @c1 integer = next value for [dbo].[usq_SequenceForT1]  
insert into T1 values (@c1, 'test', getdate())  

Après avoir effectué l’insertion plusieurs fois, vous voyez des valeurs monotoniquement croissantes valides dans la colonne [c1]. Ce jeu de résultats est généré à l'aide de l'analyse de table et de l'index de hachage sans ORDER BY, donc les lignes ne sont pas ordonnées.

Voir aussi

Migration vers In-Memory OLTP