我正在開發一個ASP.NET應用程序,用於分析用戶上傳的Excel文件。這些文件包含有關客戶的各種數據(一行=一個客戶),關鍵字段爲CustomerCode
。基本上數據以DataTable
對象的形式出現。SQL Server - 規避大型IN(...)子句(> 40000項)的最佳實踐
在某些時候,我需要從SQL獲取有關指定客戶的信息,並將其與用戶上傳的信息進行比較。我做了以下方法:'Customer1','Customer2',...'CustomerN'
:
- 從
CustomerCode
列做一個逗號分隔的客戶名單。 - 將此字符串傳遞給SQL查詢
IN (...)
子句並執行它。
這是工作好,直到我試圖傳遞〜裏面IN (...)
第40000項時跑進The query processor ran out of internal resources and could not produce a query plan
例外。
瑣碎的方式似乎:
- 在查詢模板替換
IN (...)
與= 'SomeCustomerCode'
。 - 對每個
CustomerCode
執行此查詢40000次。 - 做
DataTable.Merge
40000次。
有沒有更好的方法來解決這個問題?
注意:我不能做IN (SELECT CustomerCode FROM ... WHERE SomeConditions)
,因爲數據來自Excel文件,因此無法從數據庫查詢。
您是否可以不創建臨時表並將其添加到主表中? – Andrew
是的,也想過這個。但是在這種情況下,我需要插入40000行,或者通過另一個大的INSERT查詢(它不會失敗嗎?)或執行40000次INSERT。 – Taosique
從40000個輸入生成最終表格所產生的*結果*有多可用?此外,SQL Server具有可以讀取Excel文件的OLE DB提供程序,如果將文件放置在數據庫服務器可以讀取它們的某個位置是可行的,那麼「從Excel文件中不能從DB查詢」。是不正確的。 –