KB4039776 – OPRAVA: Nesprávné chování při použití tabulek optimalizovaných pro paměť s příkazem "kde existuje" v SQL Server 2016 nebo 2017

Platí pro
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)

Příznaky

Předpokládejme, že používáte Microsoft SQL Server 2016 nebo 2017. Při zpracování datových transakcí optimalizovaných pro paměť pomocí paměťově optimalizovaných proměnných tabulky s příkazem where exists se může zobrazit nesprávný výsledek.

Příklady:

Krok 1: Vytvoření databáze a tabulky optimalizované pro paměť.

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') TO FILEGROUP demo_mod

Použít ukázku

Přejít

CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE AS TABLE

( source_col INT NULL,

target_col INT not NULL

INDEX ix_InMemoryTable NONCLUSTERED (target_col)

) S (MEMORY_OPTIMIZED = ZAPNUTO)

PŘEJÍT

Krok 2: Vložení a aktualizace dat

DEKLAROVAT @t dbo. IN_MEMORY_TABLE_TYPE

INSERT @t ( source_col, target_col ) HODNOTY (10, 0), (0, 0)

*vyberte * z @t*

AKTUALIZACE R1 SET target_col = -1 Z R1 @t

WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )

*VYBERTE * OD @t*

PŘEJÍT

Krok 3: Zkontrolujte výsledky.

Skutečné výsledky: Ne všechny řádky proměnné tabulky se @t aktualizovat.

source_col | target_col


10 | -1

0 | 0

Očekávané výsledky: Všechny řádky by se měly aktualizovat tak, aby měly target_col = -1.

source_col | target_col


10 | -1

0 | -1.

Řešení

Tento problém je opravený v následujících kumulativních aktualizacích pro SQL Server:

Kumulativní aktualizace 1 pro SQL Server 2017

Kumulativní aktualizace 5 pro SQL Server 2016 SP1

Informace o kumulativních aktualizacích pro SQL Server:

Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Podívejte se na nejnovější kumulativní aktualizace pro SQL Server:

Nejnovější kumulativní aktualizace pro SQL Server 2017

Nejnovější kumulativní aktualizace pro SQL Server 2016

Stav

Společnost Microsoft potvrdila, že se jedná o problém produktů Microsoft, které jsou uvedeny v sekci Platí pro.

Reference

Podívejte se na informace o terminologii, kterou společnost Microsoft používá k popisování aktualizací softwaru.