2011-10-18 239 views
4

查詢:SQL Server查詢處理器用盡了內部資源的

update mytable 
    set mycol = null 
    where id in (
     583048, 
     583049, 
     ... (50000 more) 
) 

消息: 查詢處理器用盡了內部資源,無法生成查詢計劃。這是一個罕見的事件,並且只能用於引用大量表或分區的極其複雜的查詢或查詢。請簡化查詢。如果您認爲您錯誤地收到了此消息,請聯繫客戶支持服務以獲取更多信息。

我的查詢很簡單, 我應該怎麼寫才能正常工作?

+0

我有一個非常類似的問題。對我來說,這是一個簡單的修復:嘗試將AsParallel()添加到查詢中,就在ToList()或Count()之前。該選項將查詢分開並單獨執行,並加入結果。誰知道你也可能獲得性能提升。 –

回答

4

將值列表插入到#temp表中,然後在該表上使用in

作爲解釋in this answer大量IN值可能會導致它用完棧,因爲他們得到擴大到OR

See also related connect item

+0

那麼你不能將值插入到#temp表中,它會失敗並出現相同的錯誤。 – Softlion

+0

語法分析掃描文本時SQL Server Management Studio崩潰了(太多的行?)。所以我用visual studio,將每個10k行的10組列表剪下來,然後運行查詢10次... – Softlion

+0

@Softion - 什麼失敗了?插入到'#temp'表中還是使用'in'中的'#temp'表? –