Simptome
Pretpostavimo da koristite Microsoft SQL Server 2016 ili 2017. Kada transakcije podataka optimizovane za memoriju obradite pomoću promenljivih tabela optimizovanih za memoriju sa izvodom gde postoji izraz, možete dobiti pogrešan rezultat.
Na primer:
1. korak: Kreiranje baze podataka i tabele optimizovane za memoriju.
Create DATABASE demo
ALTER DATABASE demo ADD FILEGROUP demo_mod CONTAINS MEMORY_OPTIMIZED_DATA
ALTER DATABASE DEMO ADD FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') U FILEGROUP demo_mod
Koristi demonstraciju
Idi na
CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE AS TABLE
( source_col INT NULL,
target_col INT nije BEZ VREDNOSTI
INDEX ix_InMemoryTable NENCLUSTERED (target_col)
) WITH (MEMORY_OPTIMIZED = UKLJUČENO)
IDI NA
2. korak: Umetanje podataka i ažuriranje podataka.
DECLARE @t dbo. IN_MEMORY_TABLE_TYPE
INSERT @t ( source_col, target_col ) VALUES (10, 0),(0, 0)
izaberite * iz @t
UPDATE r1 SET target_col = -1 FROM @t r1
WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )
IZABERITE * IZ @T
IDI NA
3. korak: Provera rezultata.
Stvarni rezultati: Ne ažuriraju se svi redovi promenljivih @t ažuriraju.
source_col | target_col
----------------------
10 | -1
0 | 0
Očekivani rezultati: Svi redovi bi trebalo da se ažuriraju tako da imaju target_col = -1.
source_col | target_col
----------------------
10 | -1
0 | -1.
Rezoluciju
Ovaj problem je rešen u sledećim kumulativnim ispravkama za SQL Server:
Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su uključene u prethodnu kumulativnu ispravku. Pogledajte najnovije kumulativne ispravke za SQL Server:
Status
Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku "Odnosi se na".
Reference
Saznajte više o terminologiji kojuMicrosoft koristi za opisivanja softverskih ispravki.