共用方式為


當您在 SQL Server Management Studio 中執行查詢時發生 OutOfMemoryException 錯誤 (SSMS)

本文可協助您解決當您使用 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:將結果輸出為文字

設定查詢視窗,將查詢結果輸出為文字。 文字輸出使用比方格少的記憶體,而且可能足以顯示查詢結果。 若要進行這項變更,請遵循下列步驟:

  1. 以滑鼠右鍵按下查詢視窗。
  2. 選取 [結果至]。
  3. 選取結果至文字

方法 2:將結果輸出至檔案

設定查詢視窗,將查詢結果輸出至檔案。 檔案輸出會使用最少的內存量。 這會保留更多記憶體來儲存結果集。 若要進行這項變更,請遵循下列步驟:

  1. 以滑鼠右鍵按下查詢視窗。
  2. 選取 [結果至]。
  3. 選擇 將結果匯出到檔案
  4. 執行查詢,然後選取儲存結果檔案的位置。

方法 3:使用 sqlcmd

使用 sqlcmd 公用程式 ,而不是 SSMS 來執行 SQL 查詢。 此方法可讓查詢執行,而不需要 SSMS UI 所需的資源。 此外,您可以使用 64 位版本的 Sqlcmd.exe,以避免影響 32 位 SSMS 進程的記憶體限制。