簡體   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