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.