Оптимизатор MS SQL не может построить план запроса

На днях столкнулся с ошибкой MS SQL в результате которой сервер отправляет в тех. поддержку Microsoft.  Решение пришло не быстро, поэтому решил описать в блоге, возможно кому то поможет.

Текст ошибки такой:

Internal Query Processor Error: The query processor could not produce a query plan. For more information, contact Customer Support Services.

В моем случае было много джойнов и оптимизатор не мог построить план запроса. То есть упрощенно было много CTE в каждой из которых множество джойнов, потом выборка из этих CTE джойнится к реальным таблицам, от этого у SQL сносило крышу. Версия — MS SQL 2012 SP3.

Фикс — использование опции FORCE ORDER, которая указывает что при оптимизации запроса нужно учитывать порядок джойнов заданный разработчиком.

Т.е. если такой код вызывает описанную выше ошибку :

То вот такой прекрасно работает:

Удачи.

Также можно почитать: