KB4039776 — POPRAWKA: Nieprawidłowe zachowanie podczas używania tabel zoptymalizowanych pod kątem pamięci z instrukcją "where exists" w SQL Server 2016 lub 2017

Dotyczy
SQL Server 2016 Service Pack 1 SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 on Windows (all editions)

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.