Simptomi
Pretpostavimo da koristite Microsoft SQL Server 2016 ili 2017. Kada obrađujete transakcije podataka optimizirane za memoriju pomoću varijabli tablica optimiziranih za memoriju s izjavom gdje postoji, možda ćete dobiti pogrešan rezultat.
Na primjer:
Prvi korak: stvaranje baze podataka i tablice optimizirane za memoriju.
Stvaranje pokazne verzije BAZE PODATAKA
ALTER DATABASE demo ADD FILEGROUP demo_mod CONTAINS MEMORY_OPTIMIZED_DATA
DEMO ALTER DATABASE ADD FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') u filegroup demo_mod
Korištenje pokazne verzije
Ići
Stvori vrstu dbo. IN_MEMORY_TABLE_TYPE KAO TABLICA
( source_col INT NULL,
target_col INT not NULL
INDEKS ix_InMemoryTable NIJECLUSTERED (target_col)
) WITH (MEMORY_OPTIMIZED = UKLJUČENO)
IĆI
Drugi korak: umetanje podataka i ažuriranje podataka.
DECLARE @t dbo. IN_MEMORY_TABLE_TYPE
INSERT @t ( source_col, target_col ) VRIJEDNOSTI (10, 0),(0, 0)
select * from @t
AŽURIRANJE r1 SET target_col = -1 FROM @t r1
WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )
SELECT * FROM @t
IĆI
Treći korak: provjera rezultata.
Stvarni rezultati: ne ažuriraju se svi reci varijable @t tablice.
source_col | target_col
----------------------
Broj 10 | -1
Broj 0 | 0
Očekivani rezultati: svi reci trebali bi se ažurirati tako da imaju target_col = -1.
source_col | target_col
----------------------
Broj 10 | -1
Broj 0 | -1.
Rješenje
Taj je problem riješen u sljedećim kumulativnim ažuriranjima za SQL Server:
Svako novo kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sve sigurnosne popravke koji su obuhvaćeni prethodnim kumulativnim ažuriranjem. Pogledajte najnovija kumulativna ažuriranja za SQL Server:
Status
Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku "Odnosi se na".
Reference
Informirajte se o terminologijikoju Microsoft koristi za opisivanje softverskih ažuriranja.