KB4046745 — ИСПРАВЛЕНИЕ. Инструкция UPDATE завершается автоматическим сбоем при ссылке на несуществующие функции секционирования в предложении WHERE в SQL Server 2014, 2016 или 2017

Применяется к
SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer SQL Server 2017 Enterprise Core SQL Server 2017 Enterprise SQL Server 2016 Service Pack 1 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

Проблема

Предположим, что у вас есть инструкция UPDATE, которая ссылается на несуществующую функцию секционирования с помощью $PARTITION ключевое слово в Microsoft SQL Server 2014, 2016 или 2017. Например:

Примечание

UPDATE TableName SET ColumnName='xyz' WHERE $PARTITION. NonExistingPartitionFunction(ColumnName) = 1

В этом случае SQL Server не выполняет обновление или не возвращает сообщение об ошибке, указывающее, что объект NonExistingPartitionFunction не существует. Однако с точки зрения пользователя кажется, что инструкция UPDATE успешно выполнена, но на самом деле она завершилась ошибкой.

Причина

При выполнении пакета SQL Server может выполнять отложенное разрешение имен (DNR). В этом процессе SQL Server не сразу выдает ошибку при обнаружении несуществующего объекта и ожидает, что объект будет создан модулем или пакетом до выполнения инструкции, которая ссылается на этот объект. Для функций секционирования SQL Server неправильно обрабатывает DNR.

Дополнительные сведения

Дополнительные сведения о DNR см. в разделе Разрешение отложенных имен.

Решение

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

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

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

Накопительный пакет обновления 9 для SQL Server 2014 с пакетом обновления 2 (SP2)

Сведения о накопительных обновлениях для SQL Server:

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

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

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

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

Состояние

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

Ссылки

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