Příznaky
Předpokládejme, že používáte Microsoft SQL Server 2016 nebo 2017. Při zpracování transakcí dat optimalizovaných pro paměť pomocí proměnných tabulky optimalizovaných pro paměť pomocí příkazu where exists může dojít k nesprávnému výsledku.
Příklad:
Krok 1: Vytvoření databáze a tabulky optimalizované pro paměť
Ukázka vytvoření databáze
ALTER DATABASE demo ADD FILEGROUP demo_mod CONTAINS MEMORY_OPTIMIZED_DATA
ALTER DATABASE demo ADD FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') DO FILEGROUP demo_mod
Použití ukázky
Jít
CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE JAKO TABULKU
( source_col INT NULL,
target_col INT není NULL
INDEX ix_InMemoryTable NONCLUSTERED (target_col)
) WITH (MEMORY_OPTIMIZED = ZAPNUTO)
JÍT
Krok 2: Vložení dat a aktualizace dat
DEKLARUJTE @t dbo. IN_MEMORY_TABLE_TYPE
VLOŽIT @t ( source_col, target_col ) HODNOTY (10, 0),(0, 0)
select * from @t
UPDATE r1 SET target_col = -1 FROM @t r1
WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )
SELECT * FROM @t
JÍT
Krok 3: Zkontrolujte výsledky.
Skutečné výsledky: Ne všechny řádky proměnné tabulky @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:
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:
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.
Odkazy
Seznamte se s terminologií, kterou Microsoft používá k popisu aktualizací softwaru.