草庐IT

sql-server-2005 - SQL Server 2005 错误 701 - 内存不足

coder 2023-06-04 原文

在 SQL Server 2005 上执行大约 26MB 的 .sql 文件时,我目前收到以下错误消息:

Msg 701, Level 17, State 123
There is insufficient system memory to run this query.

我正在使用 4GB RAM、64 位 Windows 7 Ultimate、Core2Duo T6400(2GHz)...

有没有办法在不收到此消息的情况下执行它(可能强制 SQL Server 使用交换文件?)或部分执行它的方法(例如一次 100 次查询)...

该文件基本上是一个 CREATE TABLE,后跟数以千计的 INSERT 查询,我有很多(使用 ABC DBF 转换器将 .DBF 文件转换为 SQL 查询)

任何想法将不胜感激!

最佳答案

这个问题实际上似乎在这里经常出现。 Mark有正确的(也是最常用的)答案,但让我尝试添加我能做到的更清楚的答案。

错误信息有点误导。 SQL Server 告诉您它没有足够的内存来运行查询,但它真正的意思是它没有足够的内存来解析查询。

当涉及到运行查询时,SQL Server 可以使用它想要的一切——如果需要,可以使用千兆字节。解析是另一回事。服务器必须构建一个解析树,并且可用的内存量非常有限。我从来没有在任何地方找到实际的限制记录,但对于一个典型的充满 INSERT 语句的批处理,它一次不能处理超过几 MB。

很抱歉告诉你这个,但是你不能让 SQL Server 完全按照它所写的那样执行这个脚本。没有办法,没有办法,不管你调整什么设置。但是,您确实有多种解决方法:

具体来说,您有三个选择:

  1. 使用 GO 语句。这被 SSMS 和其他各种工具用作批处理分隔符。不是为整个脚本生成单个解析树,而是为由 GO 分隔的批处理的每个段生成单独的解析树。这是大多数人所做的,并且仍然使脚本具有事务安全性非常简单,正如其他人所展示的那样,我不会在这里重复。

  2. 不要生成大量脚本来插入所有行,而是将数据保存在文本文件中(即逗号分隔)。然后使用 bcp utility 导入它.如果您需要它是“可编写脚本的” - 即导入需要在与 CREATE TABLE 语句相同的脚本/事务中进行,然后使用 BULK INSERT反而。尽管 BULK INSERT 是一个不记录的操作,不管你信不信,它仍然可以放在 BEGIN TRAN/COMMIT TRAN block 中。

  3. 如果您真的非常希望 INSERT 成为记录操作,并且不希望插入分批发生,那么您可以使用 OPENROWSET将文本文件、excel 文件等作为临时“表格”打开,然后将其插入新创建的表格中。我通常不愿意推荐使用 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 脚本来完成这项工作,而且我不认为这种复杂程度是这里真的有保证。

关于sql-server-2005 - SQL Server 2005 错误 701 - 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2296374/

有关sql-server-2005 - SQL Server 2005 错误 701 - 内存不足的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  3. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  4. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  5. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  6. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  7. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  8. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  9. arrays - 这是 Ruby 中 Array.fill 方法的错误吗? - 2

    这个问题在这里已经有了答案:Arraysmisbehaving(1个回答)关闭6年前。是否应该这样,即我误解了,还是错误?a=Array.new(3,Array.new(3))a[1].fill('g')=>[["g","g","g"],["g","g","g"],["g","g","g"]]它不应该导致:=>[[nil,nil,nil],["g","g","g"],[nil,nil,nil]]

  10. ruby-on-rails - Ruby on Rails 计数器缓存错误 - 2

    尝试在我的RoR应用程序中实现计数器缓存列时出现错误Unknownkey(s):counter_cache。我在这个问题中实现了模型关联:Modelassociationquestion这是我的迁移:classAddVideoVotesCountToVideos0Video.reset_column_informationVideo.find(:all).eachdo|p|p.update_attributes:videos_votes_count,p.video_votes.lengthendenddefself.downremove_column:videos,:video_vot

随机推荐