从SQL返回部分结果

时间:2013-12-15 02:52:34

标签: sql-server asp.net-mvc-3 jqgrid-asp.net

SETUP:

  • asp.net MVC3
  • C#
  • SQL Server 2008 R2
  • 的jqGrid

我有一个从大型数据库中提取的存储过程。根据用户选择的参数值,这可能会很快返回结果,或者可能需要几分钟。

如果条件合适,我经常会等待SQL,或者在渲染结果时出现MAXJSONLENGTH错误。

我希望SQL以500条记录的批次返回结果,C#序列化并传递批次,jQgrid加载结果,因为它们可用。这将使其感觉更具响应性并避免超时和最大长度错误。

在找不到更多结果之前,进行ajax调用以获得更多结果非常简单,但我必须确保在后续请求中没有获得任何先前提供的结果。

在另一个区域,我将记录ID返回到存储过程以排除结果。在这种情况下,结果中没有太多记录,但搜索通常需要很长时间。在处理这么多记录时,我不认为这种方法是个好主意,但我不确定如何做到这一点。

结果没有订购,因此再次运行程序并不能保证在开始时获得相同的500条记录。

你会推荐什么?或者,我是否过度思考这个? (我不是要求你对它进行编码 - 但如果你有一个例子就不会抱怨。我只是需要有关如何解决这个问题的新想法。)

1 个答案:

答案 0 :(得分:0)

根据您的问题,我推断有一些请求会返回大量行,导致最大长度为json错误或超时错误。

我建议你使用分页并让你的查询只返回一组有限的行。您可以通过在SQL Server中使用ROW_NUMBER()函数,然后在WHERE子句中添加过滤条件来实现此目的:

WHERE RowNum BETWEEN @PageNumber * @PageSize AND (@PageNumber + 1) * @PageSize

对于排序,您可以添加ORDER BY子句,并且可以考虑添加聚簇索引,以防您在该表上的几乎所有查询中都期望此顺序。