KB4039776 – RJEŠENJE: neispravno ponašanje prilikom korištenja tablica optimiziranih za memoriju s izjavom "gdje postoji" u sustavu SQL Server 2016 ili 2017

Primjenjuje se na
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)

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.