我有一个表(Sql server 2014),有6000万个数据。在获取我正在获取的数据时
“执行批处理时发生错误。错误信息是:抛出类型'System.OutOfMemoryException'的异常。”
任何人都可以在这里帮忙吗?
答案 0 :(得分:7)
关闭并重新打开SQL Management Studio,看看是否能解决这个问题。如果我将它打开太长时间或打开太多查询窗口,我的网站会不时地执行此操作。
答案 1 :(得分:0)
System.OutOfMemoryException
表示您尝试在内存中加载过多数据。您需要在每个请求中加载较少的数据。您可以使用WHERE
子句过滤掉结果,也可以使用TOP
子句来限制返回的行数。
TOP
的示例:
SELECT TOP 1000 * FROM tablename
WHERE
的示例:
SELECT * FROM tablename WHERE ID < 500
如果最后你确实需要加载表中的所有行,则必须使用分页系统。这意味着您将使用TOP
限制返回的行数,并为每个“页面”“跳过”给定数量的行。
有关SQL Server中分页的介绍,请参阅this page。
这是一个通用的分页示例,假设您有一个增量和连续的ID
策略:
// page 0
SELECT TOP 1000 * FROM tablename
// page 1
SELECT TOP 1000 * FROM tablename WHERE ID > 1000 * 1
// page 2
SELECT TOP 1000 * FROM tablename WHERE ID > 1000 * 2
// page 5
SELECT TOP 1000 * FROM tablename WHERE ID > 1000 * 5
在一个实际示例中,*
之后的值将替换为表示当前页面的动态值,如1000 * currentPageCount
答案 2 :(得分:0)
看起来像SQL Management Studio内存泄漏会导致长时间运行的会话。重新启动它有助于解决此问题
答案 3 :(得分:0)
此异常是由长时间运行的查询占用的SSMS进程引起的。不用担心,您可以下次尝试并在下一个选项卡上运行查询。
答案 4 :(得分:0)
如果您在SSMS中打开了这么多新的查询编辑器,则也可能导致此错误。尝试关闭SSMS中不必要的标签。
答案 5 :(得分:0)
答案 6 :(得分:0)
就我而言,即使有8行的表,我也遇到了问题。 这对我有用:
这是由于未使用的临时文件引起的。