[英]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.