Bagikan melalui


Menerapkan IDENTITY dalam Tabel Memory-Optimized

IDENTITY(1, 1) dapat didukung pada tabel yang dioptimalkan untuk memori. Namun, kolom identitas dengan definisi IDENTITY(x, y) di mana x != 1 atau y != 1 tidak didukung pada tabel yang dioptimalkan memori. Solusi untuk nilai IDENTITY menggunakan objek SEQUENCE (Nomor Urutan).

Pertama-tama hapus properti IDENTITY dari tabel yang Anda konversi ke In-Memory OLTP. Kemudian, tentukan objek SEQUENCE baru untuk kolom dalam tabel. Objek SEQUENCE sebagai kolom identitas mengandalkan kemampuan untuk membuat nilai DEFAULT untuk kolom yang menggunakan sintaks NEXT VALUE FOR untuk mendapatkan nilai identitas baru. Karena DEFAULT tidak didukung dalam In-Memory OLTP, Anda perlu meneruskan nilai URUTAN yang baru dibuat baik ke pernyataan INSERT atau ke prosedur tersimpan yang dikompilasi secara asli yang melakukan penyisipan. Contoh berikut menunjukkan pola ini.

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

Setelah melakukan penyisipan beberapa kali, Anda akan melihat nilai yang meningkat secara monoton yang valid di kolom [c1]. Tataan hasil ini dihasilkan menggunakan pemindaian tabel dan indeks hash tanpa ORDER BY sehingga baris tidak diurutkan.

Lihat Juga

Migrasi ke Dalam Memori OLTP