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