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