mysql2005错误_sql-server-2005 – SQL Server 2005错误701 – 内存不足
這個問題實際上似乎經常出現在這里.
Mark有正確的(也是最常用的)答案,但是讓我嘗試添加我能做的更清楚的答案.
錯誤消息有點誤導. sql Server告訴您它沒有足夠的內存來運行查詢,但它的真正含義是它沒有足夠的內存來解析查詢.
在運行查詢時,sql Server可以使用它想要的所有內容 – 如果需要,可以使用千兆字節.解析是另一個故事;服務器必須構建一個解析樹,并且只有非常有限的內存可用.我從來沒有發現任何地方記錄的實際限制,但對于一個典型的批處理INSERT語句,它一次不能處理超過幾MB.
所以我很遺憾地告訴你這個,但是你不能讓sql Server完全按照它編寫的那樣執行這個腳本.沒有辦法,沒有辦法,無論你調整什么設置都沒關系.但是,您可以使用許多選項來解決它:
具體來說,您有三個選擇:
>使用GO語句.這被SSMS和各種其他工具用作批處理分隔符.不是為整個腳本生成單個解析樹,而是為由GO分隔的批次的每個段生成單獨的解析樹.這是大多數人所做的事情,并且使腳本在事務上安全非常簡單,正如其他人所證明的那樣,我在此不再重復.
>不是生成大量腳本來插入所有行,而是將數據保存在文本文件中(即以逗號分隔).然后使用bcp utility導入它.如果您需要“可編寫腳本” – 即導入需要在與CREATE TABLE語句相同的腳本/事務中進行,則使用BULK INSERT代替.雖然BULK INSERT是一個非記錄操作,不管你信不信,它仍然可以放在一個BEGIN TRAN / COMMIT TRAN塊中.
>如果你真的,真的希望INSERT成為一個記錄操作,并且不希望批量發生插入,那么你可以使用OPENROWSET打開一個文本文件,excel文件等作為ad-hoc“表“,然后將其插入到新創建的表中.我通常不愿意推薦使用OPENROWSET,但由于這顯然是一個管理腳本,因此它并不是一個主要問題.
之前的評論表明你對#1感到不舒服,盡管這可能只是因為不能在一次交易中做錯的假設,在這種情況下請參見Thomas的回答.但是,如果你已經走了另一條道路,我建議選擇#2,創建一個文本文件并使用BULK INSERT. “安全”腳本的一個示例是:
BEGIN TRAN
BEGIN TRY
CREATE TABLE MyTable (...)
BULK INSERT MyTable
FROM 'C:\Scripts\Data\MyTableData.txt'
WITH (
FIELDTERMINATOR = ',',ROWTERMINATOR = '\r\n',BATCHSIZE = 1000,MAXERRORS = 1
)
COMMIT
END TRY
BEGIN CATCH
ROLLBACK
END CATCH
希望這有助于您走上正確的軌道.我很確定這涵蓋了你所有可用的“盒子里”選項 – 除此之外,你必須開始編寫實際的應用程序或shell腳本來完成這項工作,我認為這種復雜程度并不高真的有理由在這里.
總結
以上是生活随笔為你收集整理的mysql2005错误_sql-server-2005 – SQL Server 2005错误701 – 内存不足的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 大文件 md5_使用Java为
- 下一篇: php json java_php 解析