我正在Windows Server 2008 Enterprise上使用SQL Server 2008 Enterprise。我使用以下代码为查询返回部分数据,以便在我的web应用程序上实现分页(即向上/向下分页以在每页显示部分结果,就像谷歌搜索结果分页一样)(我使用pageCount作为每页上显示的结果数,使用startPos作为结果的起始号)。例如,pageCount 10表示每页显示10个结果,startPos =0表示第一页,startPos =1表示第二页,依此类推。
我的问题是如何在我的场景中有效地获得结果总数?我主要关心的是如何实现分页(即只触摸结果的一部分),同时检索结果的总数?
SELECT *
 FROM   (SELECT
    t.foo, t.goo, ROW_NUMBER() OVER (order by t.zoo DESC ) AS rowNum
   FROM
    dbo.mycorp  t
   WHERE
    (t.foo LIKE '%'+@search+'%'
    or t.foo  LIKE '%'+@search+'%'
    )
    ) tt
    WHERE  tt.rowNum between @startPos and  @pageCount + @startPos-1先谢谢你,乔治
发布于 2010-09-06 12:45:56
如果您的数据访问技术支持多个记录集,我会考虑使用它(我知道ADO.NET确实支持它)。
在查询后包括以下内容
SELECT COUNT(*) AS TotalRecordCount
 FROM   dbo.mycorp  t 
   WHERE 
    (t.foo LIKE '%'+@search+'%' 
    or t.foo  LIKE '%'+@search+'%' 
    ) 
    ) tt在数据访问层中,您需要在处理搜索结果后切换到下一个记录集,以便检索总计数。使用ADO.NET时,这需要调用dataReader.NextResult()。
最重要的事情是衡量性能。我发现在某些情况下,使用单独的select语句而不是子查询可以带来更快的性能,因为查询优化器能够更好地优化查询。无论哪种方式,您都需要在搜索列上建立适当的索引。
https://stackoverflow.com/questions/3648936
复制相似问题