我需要知道查询的记录数(只是计数),然后在查询中应用top子句以获取最顶层的选定行。原因是我需要这些数据进行分页。所以例如
Select * from Table Where a = 10
会给我100000行。我需要100000行计数信息,然后我想只获得前10个记录
这是我需要的分页目的,在申请方面,我显示10条100000条记录。
注意 - 这个我必须在SQL Server 2000中实现 我想在单个go中获得输出(计数和结果集)。即我不想在任何临时表中保存resuletset或者不想多次执行查询
答案 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