SQL Server 2008 R2,查询在 65536 行后退出

Posted

技术标签:

【中文标题】SQL Server 2008 R2,查询在 65536 行后退出【英文标题】:SQL Server 2008 R2, Query exiting after 65536 rows 【发布时间】:2014-10-25 14:11:01 【问题描述】:

正如标题所说,我在使用 SQL Server 2008 R2 时遇到了一个特殊问题。 我目前正在使用 Analytics 项目中的庞大数据集,每个表中有近 100 万行。现在的问题是,如果我使用普通的 select 语句运行查询,例如 Select * from Table... 给我整个表格的结果,即使是 where 条件也给出了完美的结果。

但是,只要我在查询中使用任何聚合函数,我就只会得到 65536 行,之后查询就会退出。现在我百分之百确定结果集比返回的要大得多。 在提出问题之前我尝试过的步骤。 1) 尝试在 SQL Server Management Studio 选项中将结果增加到网格大小。它的最大值为 65536 2) 使用查询导出为 CSV。总行数为 65536 3) 导出到 Excel.. 同样的问题。

请指导我我做错了什么。

作为参考,我发布了遇到此问题的 SQL 查询。

选择 a.Store,a.Seq_Item, MIN(a.Date) StartDate,MAX(a.Date) EndDate,SUM(a.Transaction_Items)tot_sales, COUNT(a.Transaction_Items)tot_sales_day,(DATEDIFF(DAY, MIN(a.Date), MAX(a.Date))+1)actual_days, ROUND(SUM(a.Transaction_Items)/CAST(COUNT(a.Transaction_Items) 作为浮点数),2)avg_sales_per_sales_day, ROUND(SUM(a.Transaction_Items)/CAST((DATEDIFF(DAY, MIN(a.Date), MAX(a.Date))+1) 作为浮点数),2)avg_sales_per_actual_day, round((ROUND(SUM(a.Transaction_Items)/CAST(COUNT(a.Transaction_Items) 作为浮点数),2)/ ROUND(SUM(a.Transaction_Items)/CAST((DATEDIFF(DAY, MIN(a.Date), MAX(a.Date))+1)作为浮点数),2)),2)sales_day_velocity, ROUND(round((ROUND(SUM(a.Transaction_Items)/CAST(COUNT(a.Transaction_Items) as float),2)/ ROUND(SUM(a.Transaction_Items)/CAST((DATEDIFF(DAY, MIN(a.Date), MAX(a.Date))+1)as float),2)),2),0) 类别 从 店铺129个 group by a.Seq_Item,a.Store order by a.Seq_Item

现在,我在 Amazon Server 托管环境中工作,并且可以选择将我的 SQL Server 版本升级到标准版。目前是Express版。现在,如果我升级,那会解决我的问题吗?

问候, Arindom Ray Chaudhuri

【问题讨论】:

通常为您提供这么多结果的查询无论如何都不会执行,因为实际加载结果需要相当长的时间和内存。如果您在某种视图中使用这些结果,您可能希望在查询本身中构建分页参数 您好 Batavia,感谢您的回复。您能否详细说明这一点,例如,如果我开始使用视图,我需要采取哪些步骤。 我尝试创建一个视图,但我得到了一个错误,如 ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP 或 FOR XML . 好的,删除了 order by 子句,仍然是同样的问题。停留在 65536 行 我的观点是 65536 行最有可能在许多情况下实际使用。你也可以看看这里***.com/questions/13220743/… 看看你如何实现分页 【参考方案1】:

http://msdn.microsoft.com/en-us/library/ms143432.aspx

这是一个批量大小,因此可以尝试将结果加载到临时表中,然后从中查询。可能不是完美的解决方案。

请原谅我的“答案”,由于缺少积分,我无法发表评论。

【讨论】:

我尝试将结果放到另一个表中,同样的问题,新表只有 65536 行。如果这是一些 SQL Server 许可问题,我绝对可以寻找更高版本,但首先我需要知道它是否是许可问题。 你能试试这个。这将确保成批插入行。 /* declare @Count int set @Count = 1 while @Count > 0 begin insert into NewTable <you''re select statement here make sure you select only top (10000)> set @Count = @@ROWCOUNT end */ 希望对您有所帮助 我实际上尝试了不同的方法。我了解,这是您使用的软件的限制。 SQL Server Enterprise 版有更多的记录集空间,Express 版没有。

以上是关于SQL Server 2008 R2,查询在 65536 行后退出的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008 R2:优化查询性能

SQL Server Management Studio 2008 R2 中的查询分析器在哪里?

sql 当前正在执行查询SQL Server 2008 R2

SQL SERVER 2008R2 错误码查询地址

SQL Server 2008 R2 子查询分组、求和和计数

SQL Server 2008 R2 - 将查询结果保存为 phpmyadmin 可读的 SQL 语句?