Objawy
Załóżmy, że używasz programu Microsoft SQL Server 2016 lub 2017. Podczas przetwarzania transakcji danych zoptymalizowanych pod kątem pamięci przy użyciu zmiennych tabeli zoptymalizowanych pod kątem pamięci z instrukcją where exists może zostać zwrócony nieprawidłowy wynik.
Na przykład:
Krok 1: Utwórz bazę danych i tabelę zoptymalizowaną pod kątem pamięci.
Pokaz tworzenia bazy danych
ALTER DATABASE demo ADD FILEGROUP demo_mod CONTAINS MEMORY_OPTIMIZED_DATA
ALTER DATABASE demo ADD FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') DO FILEGROUP demo_mod
Użyj pokazu
Przejdź
CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE JAKO TABELĘ
( source_col INT NULL,
target_col INT, NOT NULL
INDEKS ix_InMemoryTable NIEKLASTROWANE (target_col)
) WITH (MEMORY_OPTIMIZED = WŁ.)
IŚĆ
Krok 2. Wstawianie i aktualizowanie danych.
ZADEKLARUJ @t DBO. IN_MEMORY_TABLE_TYPE
WSTAW @t (source_col, target_col) WARTOŚCI (10, 0),(0, 0)
*wybierz * od @t*
UPDATE R1 SET target_col = -1 Z @t R1
WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )
*WYBIERZ * OD @t*
IŚĆ
Krok 3: Sprawdź wyniki.
Rzeczywiste wyniki: Nie wszystkie wiersze zmiennej tabeli @t zostaną zaktualizowane.
source_col | target_col
10 | -1
0 | 0
Oczekiwane wyniki: Wszystkie wiersze powinny zostać zaktualizowane, aby miały target_col = -1.
source_col | target_col
10 | -1
0 | -1.
Rozwiązanie
Ten problem został rozwiązany w następujących aktualizacjach zbiorczych programu SQL Server:
Aktualizacja zbiorcza 1 dla programu SQL Server 2017
Aktualizacja skumulowana 5 dla programu SQL Server 2016 z dodatkiem SP1
Informacje o aktualizacjach zbiorczych programu SQL Server:
Każda nowa aktualizacja zbiorcza programu SQL Server zawiera wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji skumulowanej. Sprawdź najnowsze aktualizacje zbiorcze dla programu SQL Server:
Najnowsza aktualizacja zbiorcza dla programu SQL Server 2017
Najnowsze aktualizacje zbiorcze dla programu SQL Server 2016
Stan
Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.
Źródła informacji
Dowiedz się więcej o terminologii używanej przez firmę Microsoft do opisywania aktualizacji oprogramowania.