Simptomi
Pretpostavimo da koristite Microsoft SQL Server 2016 ili 2017. Kada obrađujete podatkovne transakcije optimizirane za memoriju pomoću varijabli tablice optimiziranih za memoriju s naredbom where exists , možda ćete dobiti pogrešan rezultat.
Na primjer:
Prvi korak: stvaranje baze podataka i tablice optimizirane za memoriju.
Create DATABASE demo
ALTER DATABASE demo ADD FILEGROUP demo_mod SADRŽI MEMORY_OPTIMIZED_DATA
ALTER DATABASE demo ADD FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') U FILEGROUP demo_mod
Iskoristite pokaznu verziju
Idi
CREATE VRSTA DBO. IN_MEMORY_TABLE_TYPE KAO TABLICU
( source_col INT NULL,
target_col INT not NULL
INDEX ix_InMemoryTable NEKLASTERIRANI (target_col)
) S (MEMORY_OPTIMIZED = UKLJUČENO)
GO
Drugi korak: umetanje i ažuriranje podataka.
DECLARE @t dbo. IN_MEMORY_TABLE_TYPE
INSERT @t ( source_col, target_col ) VRIJEDNOSTI (10, 0),(0, 0)
*odaberite * iz @t*
UPDATE R1 SET target_col = -1 FROM @t r1
GDJE POSTOJI ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )
*ODABERITE * IZ @t*
GO
Korak 3: Provjera rezultata.
Stvarni rezultati: Ne ažuriraju se svi reci varijabli tablice @t .
source_col | target_col
10 | -1
0 | 0
Očekivani rezultati: svi bi se reci morali ažurirati tako da imaju target_col = -1.
source_col | target_col
10 | -1
0 | -1.
Rješenje
Taj je problem riješen u sljedećim kumulativnim ažuriranjima za SQL Server:
Kumulativno ažuriranje 1 za SQL Server 2017
Kumulativno ažuriranje 5 za SQL Server 2016 SP1
O kumulativnim ažuriranjima za SQL Server:
Svako novo kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sigurnosne popravke koji su obuhvaćeni prethodnim kumulativnim ažuriranjem. Pogledajte najnovija kumulativna ažuriranja za SQL Server:
Najnovije kumulativno ažuriranje za SQL Server 2017
Najnovija kumulativna ažuriranja za SQL Server 2016
Status
Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku „Odnosi se na“.
Reference
Saznajte više o terminologiji koju Microsoft upotrebljava za opisivanje softverskih ažuriranja.