Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
IDENTITY(1, 1) поддерживается в оптимизированной для памяти таблице. Однако столбцы идентификаторов с определением IDENTITY(x, y), где x != 1 или y != 1 не поддерживаются в таблицах, оптимизированных по памяти. Обходное решение для значений IDENTITY использует объект SEQUENCE (порядковые номера).
Сначала удалите свойство IDENTITY из таблицы, преобразованной в In-Memory OLTP. Затем определите новый объект SEQUENCE для столбца в таблице. Объекты SEQUENCE как идентификационные столбцы зависят от возможности создания значения DEFAULT для столбцов, использующих синтаксис NEXT VALUE FOR для получения нового идентификационного значения. Поскольку DEFAULT не поддерживаются в In-Memory OLTP, необходимо передать вновь созданное значение SEQUENCE либо в инструкцию INSERT, либо в нативно скомпилированную хранимую процедуру, которая выполняет вставку. В следующем примере показан этот шаблон.
-- 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())
После выполнения вставки несколько раз вы увидите допустимые монотонно увеличивающиеся значения в столбце [c1]. Этот результирующий набор создается с помощью сканирования таблицы и хэш-индекса без ORDER BY
, поэтому строки не упорядочены.