Saya melihat ini juga.
Ketika RCSI diaktifkan maka transaksi komit otomatis pada tingkat komitmen baca default berfungsi dengan baik saat menggabungkan dua instance dari jenis tabel memori.
DECLARE @t1 [dbo].[tType]
DECLARE @t2 [dbo].[tType]
INSERT INTO @t1 VALUES (1);
INSERT INTO @t2 VALUES (1);
SELECT *
FROM @t1
JOIN @t2
ON [@t1].C = [@t2].C
Juga menggabungkan dua tabel yang dioptimalkan memori "normal" berfungsi dengan baik tanpa petunjuk apa pun.
Selain itu, menggabungkan jenis tabel yang dioptimalkan memori kosong ke tabel yang dioptimalkan memori normal berfungsi dengan baik.
DECLARE @t [dbo].[tType];
SELECT *
FROM [dbo].[tTable] t
INNER JOIN @t
ON [@t].C = t.C
Tetapi sebaliknya tidak benar. Selama instance tipe tabel memori berisi setidaknya satu baris, maka menggabungkannya ke tabel memori (kosong atau sebaliknya) akan memunculkan kesalahan.
Solusinya sederhana dan ditunjukkan dalam pesan kesalahan. Cukup tambahkan petunjuk tabel WITH (SNAPSHOT)
DECLARE @t [dbo].[tType]
INSERT INTO @t
VALUES (1)
SELECT *
FROM [dbo].[tTable] t WITH(SNAPSHOT)
INNER JOIN @t
ON [@t].C = t.C
Atau solusi yang kurang terperinci adalah
ALTER DATABASE [MemOptimized]
SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON WITH ROLLBACK IMMEDIATE
Sejauh yang saya dapat kumpulkan, tidak satu pun dari ini yang benar-benar mengubah semantik dan kemampuan untuk menghilangkan petunjuk dalam beberapa keadaan hanyalah kenyamanan pemrograman.
Saya tidak yakin mengapa campuran dari tipe tabel memori yang berbeda ini menyebabkan pesan kesalahan khusus ini. Saya menganggap itu hanya artefak menjadi CTP dan bahwa di RTM kombinasi akan diizinkan atau pesan kesalahan dan dokumentasi akan diperbarui untuk merujuk tidak hanya ke tabel berbasis disk.