Ознаки
Припустимо, ви використовуєте 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, перелічених у розділі "Застосовується до".
Посилання
Дізнайтеся, за допомогою яких термінів корпорація Майкрософт описує оновлення програмного забезпечення.