Перейти к основному контенту
Поддержка
Войдите с помощью учетной записи Майкрософт
Войдите или создайте учетную запись.
Здравствуйте,
Выберите другую учетную запись.
У вас несколько учетных записей
Выберите учетную запись, с помощью которой нужно войти.

Проблемы

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

Пример:

Шаг 1. Создание оптимизированной для памяти базы данных и таблицы.

Создание демонстрации базы данных

Демонстрация ALTER DATABASE ADD FILEGROUP demo_mod СОДЕРЖИТ MEMORY_OPTIMIZED_DATA 

Alter DATABASE demo ADD FILE FILE (name='demo_mod1', filename='C:\DATA\demo_mod1') TO FILEGROUP demo_mod 

Использование демонстрации

Пойти

CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE AS TABLE

( source_col INT NULL,

target_col INT не NULL

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

) WITH (MEMORY_OPTIMIZED = ON)

ПОЙТИ

Шаг 2. Вставка и обновление данных.

DECLARE @t dbo. IN_MEMORY_TABLE_TYPE

INSERT @t ( source_col, target_col ) ЗНАЧЕНИЯ (10, 0),(0, 0)

выбрать * из @t

UPDATE r1 SET target_col = -1 FROM @t r1

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

SELECT * FROM @t

ПОЙТИ

Шаг 3. Проверка результатов.

Фактические результаты. Не все строки табличной переменной @t обновляться.

source_col | target_col

----------------------

10 | -1

0 | 0

Ожидаемые результаты: все строки должны быть обновлены, чтобы target_col = -1.

source_col | target_col

----------------------

10 | -1

0 | -1.

Решение

Эта проблема устранена в следующих накопительных обновлениях для SQL Server:

      Накопительный пакет обновления 1 для SQL Server 2017 

      Накопительный пакет обновления 5 для SQL Server 2016 с пакетом обновления 1 (SP1)

Каждое новое накопительное обновление для SQL Server содержит все исправления и все исправления для системы безопасности, которые были включены в предыдущее накопительное обновление. Ознакомьтесь с последними накопительными обновлениями для SQL Server:

Последнее накопительное обновление для SQL Server 2017

Последние накопительные обновления для SQL Server 2016 г.

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".

Ссылки

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

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×