Sql-Server

SQL Server 2012 - 記憶體不足,無法繼續執行程序。(mscorlib)

  • March 30, 2016

我有一個最大 180 Mb 的 sql 文件。當我嘗試在 Microsoft SQL Server Managment Studio 2012 上打開並執行它時,我收到了這個錯誤。 在此處輸入圖像描述. 做什麼?我在Google上研究過。有幾個答案。他們說的一種解決方案是執行 C# 腳本。這是它。但我不知道如何執行,無論如何該腳本是否有效。感謝幫助。

Management Studio 需要比 180MB 更多的記憶體來打開這樣的文件 - 它不僅將文件的整個文本儲存在記憶體中,而且還載入 IntelliSense 所需的任何對象、執行各種解析和驗證等。您可能有一點如果您關閉 IntelliSense 會帶來更好的運氣,但其中一些活動仍然會發生。特別是如果都是一批。

C# 方法可能適用於該文件,但我懷疑它的編寫方式並非總是知道如何解析您可能呈現的每個文件 - 考慮一下聲明變數、使用 #temp 表的情況,等等和。你可能會好得多:

  1. 將文件拆分為多個文件;
  2. 散佈大量的GO批處理分隔符以阻止 Management Studio 將腳本視為一個巨大的批處理;
  3. BULK INSERT以您可以使用、bcp、SSIS 或導入/導出的方式建構文件,而不是在 Management Studio 中打開它;要麼,
  4. 以不同的方式構造各個語句。一個例子 - 我看到很多帶有單獨插入行的大型導入文件,如下所示:
INSERT INTO dbo.tablename(col,col,col) VALUES(value,value,value);
INSERT INTO dbo.tablename(col,col,col) VALUES(value,value,value);
INSERT INTO dbo.tablename(col,col,col) VALUES(value,value,value);
INSERT INTO dbo.tablename(col,col,col) VALUES(value,value,value);

通過這樣做,您可以在文件的絕對大小中節省大量空間:

INSERT INTO dbo.tablename(col,col,col) VALUES(value,value,value),
 (value,value,value),(value,value,value),(value,value,value);

如果您目前的文件都是插入語句,這可能會產生巨大的影響;但是您確實需要注意,您不應該將超過 1,000 個集合組合在一起

僅憑這一點可能還不足以解決問題,但總的來說,恕我直言,這仍然是一個更好的策略。

我還建議您獲取最新版本(如果您使用的是 Express,請在此處獲取)。

您可以在此處查看其他建議

引用自:https://dba.stackexchange.com/questions/74088