我有一个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
任何人都可以建议一种方法来纠正上述代码中的连接。
答案 0 :(得分:5)
请重新撰写您的查询!
出现此问题是因为SQL Server限制了查询的单个表达式中可包含的标识符和常量的数量。此限制为65,535。
一种方法可能是:
您可以将选择查询拆分为多个选择查询。存储 导致临时表并在最后组合结果。
答案 1 :(得分:0)
对我来说是SQL Server版本。我在生产环境上对SQL Server 2017运行相同的查询没有问题,但在登台时遇到了SQL Server 2018的问题。我将生产中的SQL Server版本从2018年降级到2017年,此问题已解决。到目前为止,这可能是SQL Server 2018的问题