Gejala
Misalnya Anda menggunakan Microsoft SQL Server 2016 atau 2017. Saat Anda memproses transaksi data yang dioptimalkan memori dengan menggunakan variabel tabel yang dioptimalkan memori dengan pernyataan di mana ada , Anda mungkin mendapatkan hasil yang salah.
Misalnya:
Langkah1: Buat database dan tabel yang dioptimalkan memori.
Membuat demo DATABASE
MENGUBAH DEMO DATABASE TAMBAHKAN GRUP FILE demo_mod BERISI MEMORY_OPTIMIZED_DATA
ALTER DATABASE demo ADD FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') TO FILEGROUP demo_mod
Menggunakan Demo
Pergi
BUAT TIPE dbo. IN_MEMORY_TABLE_TYPE SEBAGAI TABEL
( source_col INT NULL,
target_col INT bukan NULL
INDEX ix_InMemoryTable NONCLUSTERED (target_col)
) WITH (MEMORY_OPTIMIZED = AKTIF)
PERGI
Langkah2: Sisipkan data dan perbarui data.
DEKLARASI @t dbo. IN_MEMORY_TABLE_TYPE
SISIPKAN nilai @t ( source_col, target_col ) (10, 0),(0, 0)
pilih * dari @t
UPDATE r1 SET target_col = -1 FROM @t r1
WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )
PILIH * DARI @t
PERGI
Langkah3: Periksa hasil.
Hasil Aktual: Tidak semua baris variabel tabel @t diperbarui.
source_col | target_col
----------------------
10 | -1
0 | 0
Hasil yang diharapkan: Semua baris harus diperbarui agar memiliki target_col = -1.
source_col | target_col
----------------------
10 | -1
0 | -1.
Pemecahan Masalah
Masalah ini telah diperbaiki dalam pembaruan kumulatif berikut untuk SQL Server:
Setiap pembaruan kumulatif baru untuk SQL Server berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan pembaruan kumulatif sebelumnya. Lihat pembaruan kumulatif terbaru untuk SQL Server:
Status
Microsoft telah mengonfirmasi bahwa ini adalah masalah pada produk Microsoft yang tercantum di bagian "Berlaku untuk".
Referensi
Pelajari tentang terminologiyang digunakan Microsoft untuk menjelaskan pembaruan perangkat lunak.