Požymiai
Tarkime, kad naudojate "Microsoft „SQL Server“ 2016" arba 2017 m. Kai apdorojate atminčiai optimizuotas duomenų operacijas naudodami atminčiai optimizuotus lentelės kintamuosius su sakiniu " where exists", galite gauti klaidingą rezultatą.
Pavyzdžiui:
1 veiksmas: sukurkite atminčiai optimizuotą duomenų bazę ir lentelę.
Sukurti DUOMENŲ bazės demonstraciją
ALTER DATABASE demo ADD FILEGROUP demo_mod YRA MEMORY_OPTIMIZED_DATA
ALTER DATABASE demo ADD FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') TO FILEGROUP demo_mod
Naudoti demonstracinę versiją
Eiti
SUKURTI TIPĄ dbo. IN_MEMORY_TABLE_TYPE AS TABLE
( source_col INT NULL,
target_col INT not NULL
INDEKSO ix_InMemoryTable NEKLASTERINIAI (target_col)
) NAUDOJANT (MEMORY_OPTIMIZED = ON)
GO
2 veiksmas: įveskite duomenis ir atnaujinkite duomenis.
DEKLARUOTI @t dbo. IN_MEMORY_TABLE_TYPE
ĮTERPTI ( source_col @t , target_col ) REIKŠMES (10, 0),(0, 0)
*pasirinkti * iš @t*
ATNAUJINTI R1 NUSTATYTI target_col = -1 IŠ @t R1
WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )
*PASIRINKTI * NUO @t*
GO
3 veiksmas: patikrinkite rezultatus.
Faktiniai rezultatai: Ne visos lentelės kintamojo eilutės @t atnaujinamos.
source_col | target_col
10 | -1
0 | 0
Numatomi rezultatai: Visos eilutės turėtų būti atnaujintos, kad jose būtų target_col = -1.
source_col | target_col
10 | -1
0 | -1.
Sprendimas
Ši problema išspręsta šiuose kaupiamuosiuose "„SQL Server“" naujinimuose:
1 kaupiamasis naujinimas, skirtas „SQL Server“ 2017
5 kaupiamasis naujinimas, skirtas „SQL Server“ 2016 SP1
Apie "„SQL Server“" kaupiamuosius naujinimus:
Kiekviename naujame „SQL Server“ kaupiamajame naujinime yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo įtrauktos į ankstesnį kaupiamąjį naujinimą. Peržiūrėkite naujausius "„SQL Server“" kaupiamuosius naujinimus:
Naujausias "„SQL Server“ 2017" kaupiamasis naujinimas
Naujausi kaupiamieji naujinimai, skirti „SQL Server“ 2016
Būsena
„„Microsoft““ patvirtino, kad tai yra „„Microsoft““ produktų, išvardytų dalyje „Taikoma“, problema.
Nuorodos
Sužinokite daugiau apie terminus, kuriuos „„Microsoft““ naudoja apibūdindama programinės įrangos naujinimus.