在sql server中应用top子句之前获取记录数

时间:2014-02-07 06:34:46

标签: sql sql-server tsql sql-server-2000

我需要知道查询的记录数(只是计数),然后在查询中应用top子句以获取最顶层的选定行。原因是我需要这些数据进行分页。所以例如

Select * from Table Where a = 10 

会给我100000行。我需要100000行计数信息,然后我想只获得前10个记录

这是我需要的分页目的,在申请方面,我显示10条100000条记录。

注意 - 这个我必须在SQL Server 2000中实现 我想在单个go中获得输出(计数和结果集)。即我不想在任何临时表中保存resuletset或者不想多次执行查询

3 个答案:

答案 0 :(得分:0)

您可以将Count保留在变量中,然后使用它。 e.g,

DECLARE @Count INT

SELECT @COUNT = COUNT(ID) FROM TABLE

然后使用@COUNT,

SELECT TOP @COUNT FROM TABLE2

在存储过程中使用整体,您将一次性获得结果。

答案 1 :(得分:0)

在sql server 2005及更高版本中,您可以使用Row_number排名函数并写为:

CREATE PROCEDURE sprocSelectList
  @vara int,
  @startRowIndex int,
  @pageSize int
AS

  SELECT
  *-- all your columns except row column created below
  FROM
    (SELECT ROW_NUMBER() OVER (ORDER BY '--primary key column of your table') AS Row,
     *
    FROM Table) AS TableRows
  WHERE
    (Row between (@startRowIndex) AND @startRowIndex + @pageSize - 1)
    AND a = @vara -- say 10 as you have given

答案 2 :(得分:0)

Sql-server 2000有它的局限性。但试试这两个解决方案:

select top 10 t.*,  x.cnt
from Table t 
join
(select count(*) cnt from table where a = 10) x
on 1 = 1
Where t.a = 10 

select top 10 t.*, (select count(*) from table where a = t.a) cnt
from Table t
Where t.a = 10