Проблема
При выполнении запроса в 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 г. /en-us/help/2931693
Накопительный пакет обновления 7 для SQL Server 2012 с пакетом обновления 1 (SP1) /en-us/help/2894115
Сведения о накопительных обновлениях для SQL Server
Каждый новый накопительный пакет обновления для SQL Server содержит все исправления и исправления безопасности, которые входили в состав предыдущего накопительного пакета обновления. Ознакомьтесь с последними накопительными пакетами обновления для SQL Server:
- Последний накопительный пакет обновления для SQL Server 2014
- Последний накопительный пакет обновления для SQL Server 2012 с пакетом обновления 1 (SP1)
Состояние
Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».