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

时间:2015-08-12 06:00:17

标签: sql sql-server

我有一个SQL Server存储过程,其中包含近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个,则程序运行正常。

  

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

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

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

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

2 个答案:

答案 0 :(得分:5)

请重新撰写您的查询!

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

一种方法可能是:

  

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

more info

答案 1 :(得分:0)

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