我在SQL Server 2000 DB中有一个非常丰富的存储过程,它返回一个结果集。我不想(不允许)触摸原始SP,但希望为返回的记录添加分页。
是否有可能将此SP包装为另一个获取返回结果集的SP,并且只给出行X到Y?
答案 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
的文章的链接