本文可協助您解決當您使用 SQL Server Management Studio (SSMS) 來執行傳回大量數據的 SQL 查詢時所發生的問題。
原始產品版本:SQL Server
原始 KB 編號: 2874903
徵兆
當您使用 SSMS 執行傳回非常大量資料的 SQL 查詢時,您會收到類似下列的錯誤訊息:
執行批次時發生錯誤。 錯誤訊息為:拋出了 'System.OutOfMemoryException' 型別的例外
原因
發生此問題的原因是 SSMS 記憶體不足,無法配置大型結果。 SSMS 是 32 位進程。 因此,其限製為 2 GB 的使用者模式虛擬記憶體。 SSMS 會對結果視窗中每個資料庫欄位顯示多少文字施加人為限制。 此限制在方格模式中為 64 KB,文字模式為 8 KB。 如果結果集太大,顯示查詢結果所需的記憶體可能會超過 SSMS 進程的 2 GB 限制。 因此,大型結果集可能會導致 [徵兆] 區段中提及的錯誤。
因應措施
若要解決此問題,請嘗試下列其中一種方法。
方法 1:將結果輸出為文字
設定查詢視窗,將查詢結果輸出為文字。 文字輸出使用比方格少的記憶體,而且可能足以顯示查詢結果。 若要進行這項變更,請遵循下列步驟:
- 以滑鼠右鍵按下查詢視窗。
- 選取 [結果至]。
- 選取結果至文字。
方法 2:將結果輸出至檔案
設定查詢視窗,將查詢結果輸出至檔案。 檔案輸出會使用最少的內存量。 這會保留更多記憶體來儲存結果集。 若要進行這項變更,請遵循下列步驟:
- 以滑鼠右鍵按下查詢視窗。
- 選取 [結果至]。
- 選擇 將結果匯出到檔案。
- 執行查詢,然後選取儲存結果檔案的位置。
方法 3:使用 sqlcmd
使用 sqlcmd 公用程式 ,而不是 SSMS 來執行 SQL 查詢。 此方法可讓查詢執行,而不需要 SSMS UI 所需的資源。 此外,您可以使用 64 位版本的 Sqlcmd.exe,以避免影響 32 位 SSMS 進程的記憶體限制。