Проблема
При выполнении запроса в Microsoft SQL Server 2012 или SQL Server 2014 и выполнении следующих условий в SQL Server 2012 г. создается неоптимальный план выполнения:
- Запрос содержит инструкции Case, When, Then и Else.
- Оператор When имеет константное условие, которое принимает значение false.
- Инструкция Then содержит предложение Select.
Заметки
- В плане выполнения оператор Then вычисляется и сравнивается с isFalseOrNull(0). Однако оператор When всегда имеет значение false.
- Эта проблема не возникает в Microsoft SQL Server 2008 R2
Решение
Эта проблема была исправлена в следующем накопительном обновлении SQL Server.
Накопительный пакет обновления 1 для SQL Server 2014 г. /ru-ru/help/2931693
Накопительный пакет обновления 7 для SQL Server 2012 с пакетом обновления 1 (SP1) /ru-ru/help/2894115
Сведения о накопительных обновлениях для SQL Server
Каждое новое накопительное обновление для SQL Server содержит все исправления и все исправления для системы безопасности, которые были включены в предыдущее накопительное обновление. Ознакомьтесь с последними накопительными обновлениями для SQL Server:
- Последнее накопительное обновление для SQL Server 2014 г.
- Последнее накопительное обновление для SQL Server 2012 с пакетом обновления 1 (SP1)
Состояние
Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».