Symptom
Anta att du använder Microsoft SQL Server 2016 eller 2017. När du bearbetar minnesoptimerade data transaktioner med hjälp av minnesoptimerade servervariabler med instruktionen WHERE exists kan du få ett fel meddelande.
Till exempel:
Steg 1: skapa en minnesoptimerade databas och tabell.
Skapa databas demo
ALTER ADD demo_mod filgrupp för databas demo innehåller MEMORY_OPTIMIZED_DATA
ALTER databas demo ADD FILE (namn = ' demo_mod1 ', filename = ' C:\DATA\ demo_mod1 ') till filgrupp demo_mod
Använd demo
Använder
SKAPA typen dbo. IN_MEMORY_TABLE_TYPE SOM TABELL
(source_col INT NULL
target_col INT NOT NULL
INDEX ix_InMemoryTable inte GRUPPERad (target_col)
) MED (MEMORY_OPTIMIZED = PÅ)
ANVÄNDER
Steg 2: infoga data och uppdatera data.
DEKLARERA @t dbo. IN_MEMORY_TABLE_TYPE
Infoga @t (source_col, target_col) värden (10, 0), (0; 0)
Välj * från @t
UPPDATERING R1 ange target_col =-1 från @t R1
WHERE finns (SELECT * FROM @t R2 där r2.source_col > 0)
Välj * från @t
ANVÄNDER
Steg 3: kontrol lera resultaten.
Faktiska resultat: alla rader med tabell variabel @t inte uppdateras.
source_col | target_col
----------------------
10 | -1
0 | siffrorna
Det förväntade resultatet: alla rader bör uppdateras så att de har target_col =-1.
source_col | target_col
----------------------
10 | -1
0 | 9.1.
Lösning
Det här problemet är åtgärdat i följande kumulativa uppdateringar för SQL Server:
Varje ny kumulativ uppdatering för SQL Server innehåller alla snabb korrigeringar och alla säkerhets korrigeringar som ingick i den föregående kumulativa uppdateringen. Kolla in de senaste kumulativa uppdateringarna för SQL Server:
Status
Microsoft har bekräftat att det här är ett problem i Microsoft-produkterna som nämns i "gäller".
Referenser
Lär dig mer om terminologinsom Microsoft använder för att beskriva program varu uppdateringar.