Symptomy
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 tabel zoptymalizowanych pod kątem pamięci z instrukcją where exists może zostać zwrócony nieprawidłowy wynik.
Na przyk³ad:
Krok 1. Tworzenie bazy danych i tabeli zoptymalizowanej pod kątem pamięci.
Pokaz tworzenia bazy danych
POKAZ ALTER DATABASE ADD FILEGROUP demo_mod ZAWIERA MEMORY_OPTIMIZED_DATA
ALTER DATABASE demo ADD FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') TO FILEGROUP demo_mod
Korzystanie z wersji demonstracyjnej
Przejdź
CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE JAKO TABELA
( source_col INT NULL,
target_col INT not NULL
IX_INMEMORYTABLE INDEKSU BEZ LICENCJI (target_col)
) WITH (MEMORY_OPTIMIZED = ON)
PRZEJDŹ
Krok 2. Wstawianie danych i aktualizowanie danych.
ZADEKLARUJ @t dbo. IN_MEMORY_TABLE_TYPE
INSERT @t (source_col, target_col) VALUES (10, 0),(0, 0)
wybierz pozycję * z @t
UPDATE r1 SET target_col = -1 FROM @t r1
WHERE EXISTS (SELECT * FROM @t r2 WHERE r2.source_col > 0)
SELECT * FROM @t
PRZEJDŹ
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 target_col = -1.
source_col | target_col
----------------------
10 | -1
0 | -1.
Rozwiązanie
Ten problem został rozwiązany w następujących aktualizacjach zbiorczych dla SQL Server:
Każda nowa aktualizacja zbiorcza dla SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały uwzględnione w poprzedniej aktualizacji zbiorczej. Zapoznaj się z najnowszymi aktualizacjami zbiorczymi dla SQL Server:
Stan
Firma Microsoft potwierdziła, że jest to problem w produktach firmy Microsoft wymienionych w sekcji "Dotyczy".
Informacje
Dowiedz się więcej o terminologiiużywanej przez firmę Microsoft do opisywania aktualizacji oprogramowania.