执行批处理时发生错误。错误消息是:抛出了类型'System.OutOfMemoryException'的异常。“

时间:2017-10-25 11:56:02

标签: sql-server sql-server-2014

我有一个表(Sql server 2014),有6000万个数据。在获取我正在获取的数据时

  

“执行批处理时发生错误。错误信息是:抛出类型'System.OutOfMemoryException'的异常。”

任何人都可以在这里帮忙吗?

7 个答案:

答案 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)

解决方案1:关闭并重新打开SQL Server Management Studio,然后尝试查询。

解决方案2:

enter image description here

答案 6 :(得分:0)

就我而言,即使有8行的表,我也遇到了问题。 这对我有用:

  • 正在删除%temp%位置上的Temp文件。如果问题仍然存在,请重新启动SSMS。

这是由于未使用的临时文件引起的。