Symptomer
Anta at du bruker Microsoft SQL Server-2016 eller 2017. Når du behandle transaksjoner for minne-optimerte data ved hjelp av minne-optimalisert tabellvariabler med den der finnes -setning, kan du få et feil resultat.
For eksempel:
Trinn 1: Opprette en minne-optimalisert database og tabell.
Opprette DATABASE-demo
Endre DATABASE demo filgruppe for Legg til demo_mod inneholder MEMORY_OPTIMIZED_DATA
Endre DATABASE demo Legg til fil (navn = demo_mod1, filename = 'C:\DATA\demo_mod1') til filgruppe for demo_mod
Bruk Demo
Gå
OPPRETTE TYPE dbo. IN_MEMORY_TABLE_TYPE AS-TABELL
(source_col INT NULL
target_col INT ikke NULL
INDEKSEN ix_InMemoryTable NONCLUSTERED (target_col)
) MED (MEMORY_OPTIMIZED = ON)
GÅ
Trinn 2: Sette inn data og oppdatere data.
DEKLARER @t dbo. IN_MEMORY_TABLE_TYPE
Sett inn @t (source_col, target_col) verdier (10, 0), (0, 0)
Velg * fra @t
OPPDATERINGEN r1 SET target_col = -1 fra @t r1
DER finnes (Velg * fra r2 @t der r2.source_col > 0)
Velg * fra @t
GÅ
Step3: Kontrollere resultatene.
Faktiske resultater: Ikke alle radene i tabellen variabel @t oppdateres.
source_col | target_col
----------------------
10 | -1
0 | 0
Forventet resultat: alle radene skal få oppdatert for å ha target_col = -1.
source_col | target_col
----------------------
10 | -1
0 | -1.
Løsning
Dette problemet er løst i følgende kumulative oppdateringer for SQL Server:
Hver nye kumulative oppdateringen for SQL Server inneholder alle hurtigreparasjonene og alle sikkerhetsreparasjoner som fulgte med den forrige kumulative oppdateringen. Sjekk ut de nyeste kumulative oppdateringene for SQL Server:
Status
Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".
Referanser
Lær mer om terminologiensom Microsoft bruker til å beskrive oppdateringer av programvare.