"Внутренняя ошибка: Достигнут лимит служб выражений. Please look for potentially complex expressions in your query, and try to simplify them."
Кто-нибудь сталкивался с этим раньше и нашел хорошее обходное решение?
Мне удалось обойти эту проблему, разделив мой SQL-запрос на две части и записав первый SQL-запрос select в временную таблицу, а во второй части новый SQL-запрос select выбирает из временной таблицы и использует множество операторов CROSS APPLY для вычисления каскадных вычисляемых столбцов.
Это пример того, как выглядит вторая часть, но я использую гораздо больше операторов Cross Apply для создания новых столбцов, которые являются вычислениями:
Select * from #tempTable
cross apply
(
select HmmLowestSalePrice =
round(((OurSellingPrice + 1.5) / 0.95) - (CompetitorsLowestSalePrice) + 0.08, 2)
) as HmmLowestSalePrice
cross apply
(
select checkLowestSP =
case
when adjust = 'No Room' then 'No Room'
when OrginalTestSalePrice >= CompetitorsLowestSalePrice then 'Minus'
when OrginalTeslSalePrice < CompetitorsLowestSalePrice then 'Ok'
end
) as checkLowestSP
cross apply
(
select AdjustFinalNewTestSP =
case
when FinalNewTestShipping < 0 Then NewTestSalePrice - (FinalNewTestShipping)
when FinalNewTestShipping >= 0 Then NewTestSalePrice
end
) as AdjustFinalNewTestSP
cross apply
(
select CheckFinalSalePriceWithWP =
case
when round(NewAdminSalePrice, 2) >= round(wholePrice, 2) then 'Ok'
when round(NewAdminSalePrice, 2) < round(wholePrice, 2) then 'Check'
end
) as CheckFinalPriceWithWP
DROP TABLE #tempTable
Моя цель - поместить это в sql отчет, и он работает нормально, если есть только 1 пользователь, поскольку #tempTable
создается и удаляется в одном и том же выполнении, и результаты отображаются в отчете правильно. Но в будущем, если будет несколько пользователей, я опасаюсь, что они будут писать в одну и ту же #tempTable
, что повлияет на результаты?
Я пробовал поместить это в хранимые процедуры, но все равно получаю сообщение об ошибке выше.