KB4575689 — ИСПРАВЛЕНИЕ. Неправильные результаты могут возникать при выполнении запроса связанного сервера с агрегатами или соединениями в таблице с отфильтрованным индексом на удаленном сервере в SQL Server

Применяется к
SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows SQL Server 2016 Service Pack 2 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) SQL Server 2019 on Windows

Проблема

Предположим, что вы выполняете запрос с агрегатами и соединениями (например, COUNT WITH GROUP BY) к таблице с отфильтрованным индексом в SQL Server, которая используется в качестве удаленного сервера, и у пользователя нет разрешения VIEW DEFINITION. В этом сценарии связанный сервер рассматривает отфильтрованный индекс как полный уникальный индекс, и запрос возвращает неверные результаты.

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

При выполнении удаленного запроса связанный сервер использует метаданные индекса для оптимизации запроса. Если у вас нет разрешения VIEW DEFINITION для запрашиваемой базы данных, метаданные не указывают на то, что индекс является отфильтрованным индексом, а оптимизатор запросов считает индекс полным уникальным индексом. Это исправление исправляет метаданные индекса для отфильтрованного индекса, если у вас нет разрешения VIEW DEFINITION для рассмотрения оптимизатором запросов.

Состояние

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

Решение

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

Примечание: Это исправление должно быть применено к удаленному связанному серверу.

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

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

Временное решение

Чтобы обойти эту проблему, попробуйте один из следующих методов:

  • Удалите отфильтрованный индекс.
  • Предоставьте пользователю определение представления. Например, ПРЕДОСТАВЛЕНИЕ ОПРЕДЕЛЕНИЯ ПРЕДСТАВЛЕНИЯ ДЛЯ test_user;

Ссылки

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