微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL:错误,达到了表达式服务限制?

“内部错误:已达到表达式服务限制.请在查询中查找可能复杂的表达式,并尝试简化它们.”

有没有人见过这个,找到了一个好的解决方法

我设法解决了这个问题,主要是将我的SQL查询分成两部分,然后将第一个sql select查询写入临时表,第二部分,一个新的sql select语句从临时表中选择并使用了很多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会影响结果吗?

我已经看过将它放入存储过程但仍然得到上面的错误消息.

解决方法

出现此问题的原因是sql Server限制可以包含在查询的单个表达式中的标识符和常量的数量.限制是65,535.在sql Server扩展所有引用的标识符和常量之后,将执行标识符和常量数量的测试.在sql Server 2005及更高版本中,查询在内部进行规范化和简化.这包括*(星号),计算列等.

解决此问题,请重写查询.在查询中的最大表达式中引用较少的标识符和常量.您必须确保查询的每个表达式中的标识符和常量的数量不超过限制.为此,您可能必须将查询分解为多个单个查询.然后,创建临时中间结果.

原文地址:https://www.jb51.cc/mssql/83644.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐