Príznaky
Predpokladajme, že používate Microsoft SQL Server 2016 alebo 2017. Pri spracovaní údajových transakcií optimalizovaných pre pamäť pomocou premenných tabuľky optimalizovanej pre pamäť s príkazom, v ktorom sa nachádza , sa môže vyskytnúť nesprávny výsledok.
Príklad:
Krok1: Vytvorenie databázy a tabuľky optimalizovanej pre pamäť.
Vytvorenie ukážky DATABÁZY
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žiť ukážku
Ísť
CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE AS TABLE
( source_col INT NULL,
target_col INT nie JE NULL
INDEX ix_InMemoryTable NONCLUSTERED (target_col)
) WITH (MEMORY_OPTIMIZED = ZAPNUTÉ)
ÍSŤ
Krok2: Vloženie údajov a aktualizácia údajov.
DECLARE @t dbo. IN_MEMORY_TABLE_TYPE
INSERT @t ( source_col, target_col ) VALUES (10, 0),(0, 0)
vyberte * z @t
UPDATE r1 SET target_col = -1 FROM @t r1
WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )
SELECT * FROM @t
ÍSŤ
Krok3: Kontrola výsledkov.
Skutočné výsledky: Nie všetky riadky premennej tabuľky @t aktualizovať.
source_col | target_col
----------------------
10 | -1
0 | 0
Očakávané výsledky: Všetky riadky by sa mali aktualizovať tak, aby target_col = -1.
source_col | target_col
----------------------
10 | -1
0 | -1.
Riešenie
Tento problém je opravený v nasledujúcich kumulatívnych aktualizáciách pre SQL Server:
Každá nová kumulatívna aktualizácia pre SQL Server obsahuje všetky rýchle opravy a všetky opravy zabezpečenia, ktoré boli zahrnuté do predchádzajúcej kumulatívnej aktualizácie. Pozrite si najnovšie kumulatívne aktualizácie pre SQL Server:
Stav
Spoločnosť Microsoft potvrdzuje, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v tomto článku v časti Informácie v tomto článku sa týkajú nasledujúcich produktov.
Odkazy
Získajte informácie o terminológii, ktorú spoločnosť Microsoft používa na popis aktualizácií softvéru.