Jelenségek
Tegyük fel, hogy a Microsoft SQL Server 2016-ot vagy 2017-et használja. Ha memóriaoptimalizált adattranzakciókat dolgoz fel memóriaoptimalizált táblaváltozókkal a where exists utasítással, előfordulhat, hogy helytelen eredményt kap.
Például:
1. lépés: Memóriaoptimalizált adatbázis és tábla létrehozása.
DATABASE létrehozása – bemutató
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
Bemutató használata
Megy
CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE AS TABLE
( source_col INT NULL,
target_col INT not NULL
INDEX IX_INMEMORYTABLE NEM RENDEZETT (target_col)
) WITH (MEMORY_OPTIMIZED = BE)
MEGY
2. lépés: Adatok beszúrása és adatok frissítése.
DECLARE @t dbo. IN_MEMORY_TABLE_TYPE
INSERT @t ( source_col, target_col ) VALUES (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
MEGY
3. lépés: Ellenőrizze az eredményeket.
Tényleges eredmények: Nem @t frissülni a táblaváltozó összes sora.
source_col | target_col
----------------------
10 | -1
0 | 0
A várt eredmények: Az összes sort frissíteni kell, hogy target_col = -1 legyen.
source_col | target_col
----------------------
10 | -1
0 | -1.
Megoldás
Ezt a problémát a következő összegző frissítések javítják ki a SQL Server esetében:
A SQL Server minden új összegző frissítése tartalmazza az összes gyorsjavítást és az előző összegző frissítésben szereplő összes biztonsági javítást. Tekintse meg az SQL Server legújabb összegző frissítéseit:
Állapot
A Microsoft megerősítette, hogy ez a probléma „A következőkre vonatkozik:” részben felsorolt Microsoft-termékekre vonatkozik.
Hivatkozások
Ismerje meg a Microsoft által a szoftverfrissítések leírására használt terminológiát.