繁体   English   中英

SQL 服务器 - 内部错误:已达到表达式服务限制

[英]SQL Server - Internal error: An expression services limit has been reached

我有一个 SQL 服务器存储过程,其中包含近 300 个变量。

变量创建如下:

CASE WHEN Grp1 = 'SALES' AND grp_mnth = MONTH_0 THEN SUM(Col)  OVER(PARTITION BY grp_loc,COMM) ELSE 0 END AS "SALES_1"

由于这有数据问题,所有变量都被替换为:

SUM(CASE WHEN Grp1 = 'SALES' AND grp_mnth = MONTH_0 THEN Col ELSE 0 END)  OVER(PARTITION BY grp_loc,COMM) AS "SALES_1"

上面的语句已经解决了数据问题,但是当我们添加所有300个变量时,程序会抛出以下错误,如果只添加大约100个,程序运行正常。

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

根据发布的答案,我尝试将查询拆分为多个 select 查询,错误已解决,但在组合结果时,数据未正确获取。

BEGIN

CREATE TABLE #TEMPTAB1
(
TYPE_1 char(15),
NUMBER_1 char(7),
STATUS_1 char(1),
...
)
CREATE TABLE #TEMPTAB2
(
TYPE_2 char(15),
NUMBER_2 char(7),
STATUS_2 char(1),
...
)
CREATE TABLE #TEMPTAB3
(
TYPE_3 char(15),
NUMBER_3 char(7),
STATUS_3 char(1),
...
)

SELECT * FROM 
    #TEMPTAB1 T1 
     INNER JOIN 
    #TEMPTAB2 T2 ON T1.TYPE_1=T2.TYPE_2 AND T1.NUMBER_1 = T2.NUMBER_2 AND T1.STATUS_1 = T2.STATUS_2
     INNER JOIN 
    #TEMPTAB3 T3 ON T1.TYPE_1=T3.TYPE_3 AND T1.NUMBER_1 = T3.NUMBER_3 AND T1.STATUS_1 = T3.STATUS_3

END

任何人都可以建议一种方法来更正上述代码中的连接。

请重新编写您的查询!

出现此问题的原因是 SQL Server 限制了可以包含在查询的单个表达式中的标识符和常量的数量。 此限制为 65,535。

一种方法可能是:

您可以将选择查询拆分为多个选择查询。将结果存储在临时表中并在最后合并结果。

更多信息

对我来说,它是 SQL Server 版本。 我在生产中对 SQL Server 2017 运行相同的查询没有问题,但在登台时遇到了 SQL Server 2018 的问题。 我在生产中将我的 SQL Server 版本从 2018 年降级到 2017 年,问题得到解决。 到目前为止,这可能是 SQL Server 2018 的问题

右键单击您的数据库,在数据库属性中,单击选项,然后将兼容性级别更改为列表中的较低级别。 查看此图像兼容性级别

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM