Sql-Server
如何在不耗盡記憶體的情況下執行包含許多插入的大型腳本?
題:
我有一個腳本,其中包含來自 select 語句的大約 45,000 個插入。當我嘗試執行它時,我收到一條錯誤消息,指出我的記憶體已用完。我怎樣才能讓這個腳本執行?
語境:
- 添加了一些新的數據欄位,以使應用程序與客戶端使用的另一個應用程序配合得很好。
- 從客戶端獲得了一個數據電子表格,其中包含將目前數據項映射到這些新欄位的值的數據。
- 將電子表格轉換為插入語句。
- 如果我只執行其中的一些語句,它會起作用,但整個腳本不會。
- 不,沒有錯別字。
如果有不同的方式我應該載入這些數據,請隨時責備我並讓我知道。
SQL Server 2005 的最大批處理大小為 65,536 * 網路數據包大小 (NPS),其中 NPS 通常為 4KB。可以達到 256 MB。這意味著您的插入語句平均為 5.8 KB。這似乎不對,但其中可能有多餘的空間或不尋常的東西。
我的第一個建議是在每個 INSERT 語句之後放置一個“GO”語句。這會將您的單批 45,000 個 INSERT 語句分成 45,000 個單獨的批次。這應該更容易消化。小心,如果其中一個插入失敗,您可能很難找到罪魁禍首。您可能想通過交易保護自己。如果您的編輯器具有良好的搜尋和替換功能(這將允許您搜尋和替換 \r\n 等返回字元)或宏工具,您可以快速添加這些語句。
第二個建議是使用嚮導直接從 Excel 導入數據。該嚮導在幕後為您建構一個小 SSIS 包,然後執行它。不會有這個問題。