Partilhar via


Implementando IDENTITY em uma tabela de Memory-Optimized

IDENTITY(1, 1) tem suporte em uma tabela com otimização de memória. No entanto, colunas de identidade com definição de IDENTITY(x, y) em que x != 1 ou y != 1 não têm suporte em tabelas com otimização de memória. A solução alternativa para valores IDENTITY usa o objeto SEQUENCE (Números de Sequência).

Primeiro remova a propriedade IDENTITY da tabela que você está convertendo para In-Memory OLTP. Em seguida, defina um novo objeto SEQUENCE para a coluna na tabela. Objetos SEQUENCE utilizados como colunas de identidade dependem da capacidade de criar valores padrão (DEFAULT) para colunas que usam a sintaxe NEXT VALUE FOR para obter um novo valor de identidade. Como não há suporte para DEFAULTs em In-Memory OLTP, você precisa passar o valor SEQUENCE recém-gerado para a instrução INSERT ou para um procedimento armazenado compilado nativamente que faz a inserção. O exemplo a seguir demonstra esse padrão.

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

Depois de executar a inserção várias vezes, você verá valores válidos que aumentam monotonamente na coluna [c1]. Esse conjunto de resultados é gerado usando a verificação de tabela e o índice de hash, sem ORDER BY, portanto as linhas não estão ordenadas.

Consulte Também

Migrando para In-Memory OLTP