KB4039776 – ВИПРАВЛЕННЯ. Некоректна поведінка під час використання оптимізованих для пам'яті таблиць з інструкцією where exists у SQL Server 2016 або 2017

Застосовується до
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)

Ознаки

Припустимо, ви використовуєте Microsoft SQL ServerSQL Server 2016 або 2017. Під час обробки оптимізованих для пам'яті транзакцій даних за допомогою оптимізованих для пам'яті змінних таблиці з інструкцією where exists може бути відображено неправильний результат.

Наприклад:

Крок 1. Створіть оптимізовану пам'ять бази даних і таблицю.

Create DATABASE demo

ALTER DATABASE demo ДОДАВАННЯ FILEGROUP demo_mod МІСТИТЬ MEMORY_OPTIMIZED_DATA

ALTER DATABASE demo ДОДАТИ ФАЙЛ (name='demo_mod1', filename='C:\DATA\demo_mod1') ДО FILEGROUP demo_mod

Використання демоверсії

Перейти

CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE ЯК ТАБЛИЦЮ

( source_col INT NULL,

target_col INT not NULL

ІНДЕКС ix_InMemoryTable НЕКЛАСТЕРИЗОВАНИЙ (target_col)

) WITH (MEMORY_OPTIMIZED = ON)

GO

Крок 2. Вставлення та оновлення даних

DECLARE @t dbo. IN_MEMORY_TABLE_TYPE

INSERT @t (source_col, target_col) VALUES (10, 0),(0, 0)

*Виберіть * з @t*

ОНОВЛЕННЯ R1 SET target_col = -1 З @t R1

WHERE EXISTS ( SELECT * FROM @t r2 WHERE r2.source_col > 0 )

*ВИБЕРІТЬ * З @t*

GO

Крок 3: Перевірте результати.

Фактичні результати: не всі рядки змінної таблиці @t оновлюються.

source_col | target_col


10 | -1

0 | 0

Очікувані результати: Значення в усіх рядках має бути target_col = -1.

source_col | target_col


10 | -1

0 | -1.

Спосіб усунення проблеми

Цю проблему вирішено в наведених нижче сукупних оновленнях для SQL ServerSQL Server:

Сукупний пакет оновлень 1 для SQL ServerSQL Server 2017

Сукупний пакет оновлень 5 для SQL ServerSQL Server 2016 SP1

Відомості про сукупні оновлення для SQL ServerSQL Server :

Кожне нове сукупне оновлення для SQL Server містить усі виправлення та виправлення системи безпеки, які входили до попереднього сукупного пакета оновлень. Перегляньте останні сукупні оновлення для SQL Server.

Останнє сукупне оновлення для SQL ServerSQL Server 2017

Останні сукупні оновлення для SQL ServerSQL Server 2016

Стан

Корпорація Microsoft підтвердила, що це одна з проблем з продуктами Microsoft, перелічених у розділі "Застосовується до".

Посилання

Дізнайтеся, за допомогою яких термінів корпорація Майкрософт описує оновлення програмного забезпечення.