Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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.