"Внутренняя ошибка. Достигнуто ограничение служб выражений. Пожалуйста, поищите потенциально сложные выражения в своем запросе и попробуйте упростить их."
Кто-нибудь видел это раньше и нашел хороший обходной путь?
Мне удалось обойти эту проблему, разделив мой SQL-запрос по существу на две части и записав первый SQL-запрос выбора во временную таблицу, а во второй - новый SQL-оператор выбора выбирает из временной таблицы и использует многооператора CROSS APPLY для вычисления каскадных вычисляемых столбцов.
Это пример того, как выглядит вторая часть, но я использую больше Cross Applys для создания новых столбцов, которые являются вычислениями:
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
, что повлияет на результаты?
Я смотрел на это в хранимых процедурах, но все равно получаю сообщение об ошибке выше.