我有一个遗留存储过程,返回一个大的结果集。 问题是,结果集太大,无法一次全部完成,然后在网页上进行分页和排序。使用现有的存储过程进行分页和排序
在不更改存储过程的情况下,可以将其包装在其他一些sql代码中,以仅以快速方式返回某些结果。
喜欢的东西:
EXEC the_sp限量50为了通过
我有一个遗留存储过程,返回一个大的结果集。 问题是,结果集太大,无法一次全部完成,然后在网页上进行分页和排序。使用现有的存储过程进行分页和排序
在不更改存储过程的情况下,可以将其包装在其他一些sql代码中,以仅以快速方式返回某些结果。
喜欢的东西:
EXEC the_sp限量50为了通过
在不改变存储过程的代码,你的选择是相当有限。
你可以做
CREATE TABLE #results(
[rownum] [int] identity(1,1) NOT NULL,
...Other Columns matching stored procedure result format
)
insert into #results
EXECUTE dbo.the_sp
SELECT * FROM #results
WHERE rownum BETWEEN 50 AND 100
很显然,这仍然会最终做在存储过程本身的工作相同数量的(并且增加一些开销临时表的步骤),但它会减少结果的数量回到客户端。
为了减轻这一点,并依赖于存储过程的逻辑,被显示之后
但由于这一点,你可能能够使用
SET ROWCOUNT 100
EXECUTE dbo.the_sp
要停止其返回属于页面不需要的结果将适用于存储过程中的每个语句(而不仅仅是将最终结果返回给客户端),这可能不适合。
请参阅:SQL Server 2005 Paging – The Holy Grail(需要免费注册)(并适用于SQL Server 2005起)