SQL Server对结果集的分页

时间:2011-01-19 07:00:49

标签: sql-server sql-server-2000 pagination

我在SQL Server 2000 DB中有一个非常丰富的存储过程,它返回一个结果集。我不想(不允许)触摸原始SP,但希望为返回的记录添加分页。

是否有可能将此SP包装为另一个获取返回结果集的SP,并且只给出行X到Y?

3 个答案:

答案 0 :(得分:2)

create procedure ProcWrap
as

declare @T table (ID int, Name nvarchar(50))

insert into @T
exec ProcToWrap

select *
from @T
where ID < 10

修改1 没有SQL Server 2000进行测试,我不记得表变量是否可用。这是一个使用临时表的过程。添加了一个可用于分页的RowNum标识列。

create procedure ProcWrap2
as

create table #T (RowNum int identity, ID int, Name nvarchar(50))

insert into #T
exec ProcToWrap

select *
from #T
where RowNum between 10 and 19

drop table #T

编辑2 在这种情况下,ProcToWrap的输出是列ID和名称。 RowNum会自动生成。

答案 1 :(得分:1)

从SP获取结果并将它们放在临时表中,然后您可以从该表中选择X结果。

答案 2 :(得分:1)

正如其他人所说,你必须将程序的结果放在临时表中,然后从中选择你想要的行。

<击> 要从结果中获取一组行,您需要使用ROW_NUMER()函数:

SELECT
   ROW_NUMBER() OVER (ORDER BY ID) AS row_number, *
FROM
   Your_Temp_Table
WHERE row_number BETWEEN 11 AND 20 -- For the second page of results with 10 per page.

<击>

编辑:刚刚意识到您使用的是没有ROW_NUMBER()的SQL Server 2000,抱歉

EDIT2:由于您要将查询结果存储在临时表中,因此可以向该结果集添加递增整数字段,并将其用作ROW_NUMBER() in的模拟为了选择你需要的行。

EDIT3:以下是指向pagination in SQL Server 2000

的文章的链接