Sintomi
Si supponga di usare Microsoft SQL Server 2016 o 2017. Quando si elaborano transazioni di dati ottimizzate per la memoria usando variabili di tabella ottimizzate per la memoria con l'istruzione where exists , è possibile ottenere un risultato errato.
Ad esempio:
Passaggio 1: Creare un database e una tabella ottimizzati per la memoria.
Crea demo di DATABASE
DEMO DI ALTER DATABASE ADD FILEGROUP demo_mod CONTIENE MEMORY_OPTIMIZED_DATA
ALTER DATABASE demo ADD FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') TO FILEGROUP demo_mod
Usa demo
Vai
CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE COME TABELLA
( source_col INT NULL,
target_col INT not NULL
INDICE ix_InMemoryTable NON CLUSTER (target_col)
) CON (MEMORY_OPTIMIZED = ON)
VAI
Passaggio 2: Inserire i dati e aggiornare i dati.
DECLARE @t dbo. IN_MEMORY_TABLE_TYPE
INSERIRE @t ( source_col, target_col ) VALORI (10, 0),(0, 0)
*seleziona * da @t*
AGGIORNAMENTO R1 SET target_col = -1 DA @t R1
WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )
*SELEZIONA * DA @t*
VAI
Passaggio 3: controlla i risultati.
Risultati effettivi: Non tutte le righe della variabile di tabella @t aggiornate.
source_col | target_col
10 | -1
0 | 0
Risultati previsti: Tutte le righe dovrebbero essere aggiornate in modo da avere target_col = -1.
source_col | target_col
10 | -1
0 | -1.
Risoluzione
Questo problema è stato risolto negli aggiornamenti cumulativi seguenti per SQL Server:
Aggiornamento cumulativo 1 per SQL Server 2017
Aggiornamento cumulativo 5 per SQL Server 2016 SP1
Informazioni sugli aggiornamenti cumulativi per SQL Server:
Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutte le correzioni rapide e di sicurezza incluse nell'aggiornamento cumulativo precedente. Vedere gli aggiornamenti cumulativi più recenti per SQL Server:
Aggiornamento cumulativo più recente per SQL Server 2017
Aggiornamenti cumulativi più recenti per SQL Server 2016
Stato
Microsoft ha confermato che si tratta di un problema relativo ai prodotti elencati nella sezione "Si applica a".
Riferimenti
Informazioni sulla terminologia utilizzata da Microsoft per descrivere gli aggiornamenti software.