메모리 액세스에 최적화된 테이블에서 IDENTITY 구현
IDENTITY(1, 1)는 메모리 최적화 테이블에서 지원됩니다. 그러나 x != 1 또는 y != 1인 IDENTITY(x, y) 정의를 사용하는 ID 열은 메모리 최적화 테이블에서 지원되지 않습니다. IDENTITY 값에 대한 해결 방법은 SEQUENCE 개체를 사용합니다(Sequence Numbers).
먼저 메모리 내 OLTP로 변환 중인 테이블에서 IDENTITY 속성을 제거합니다. 그런 다음 테이블의 행에 대해 새 SEQUENCE 개체를 정의합니다. ID 열인 SEQUENCE 개체는 NEXT VALUE FOR 구문을 사용하여 새 ID 값을 얻기 위해 열의 DEFAULT 값을 만드는 기능에 의존합니다. 메모리 내 OLTP에서는 DEFAULT가 지원되지 않으므로 새로 생성된 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
없이 테이블 검색과 해시 인덱스를 사용하여 생성되므로 행은 정렬되지 않습니다.