KB4039776 – PATAISYMAS: netinkamas veikimas, kai naudojate atminčiai optimizuotas lenteles su sakiniu "kur yra" 2016 arba 2017 „SQL Server“

Taikoma
SQL Server 2016 Service Pack 1 SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 on Windows (all editions)

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.