Sql-Server

如何在不耗盡記憶體的情況下執行包含許多插入的大型腳本?

  • February 2, 2022

題:

我有一個腳本,其中包含來自 select 語句的大約 45,000 個插入。當我嘗試執行它時,我收到一條錯誤消息,指出我的記憶體已用完。我怎樣才能讓這個腳本執行?

語境:

  1. 添加了一些新的數據欄位,以使應用程序與客戶端使用的另一個應用程序配合得很好。
  2. 從客戶端獲得了一個數據電子表格,其中包含將目前數據項映射到這些新欄位的值的數據。
  3. 將電子表格轉換為插入語句。
  4. 如果我只執行其中的一些語句,它會起作用,但整個腳本不會。
  5. 不,沒有錯別字。

如果有不同的方式我應該載入這些數據,請隨時責備我並讓我知道。

SQL Server 2005 的最大批處理大小為 65,536 * 網路數據包大小 (NPS),其中 NPS 通常為 4KB。可以達到 256 MB。這意味著您的插入語句平均為 5.8 KB。這似乎不對,但其中可能有多餘的空間或不尋常的東西。

我的第一個建議是在每個 INSERT 語句之後放置一個“GO”語句。這會將您的單批 45,000 個 INSERT 語句分成 45,000 個單獨的批次。這應該更容易消化。小心,如果其中一個插入失敗,您可能很難找到罪魁禍首。您可能想通過交易保護自己。如果您的編輯器具有良好的搜尋和替換功能(這將允許您搜尋和替換 \r\n 等返回字元)或宏工具,您可以快速添加這些語句。

第二個建議是使用嚮導直接從 Excel 導入數據。該嚮導在幕後為您建構一個小 SSIS 包,然後執行它。不會有這個問題。

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