2010-07-12 58 views
2

我有一个遗留存储过程,返回一个大的结果集。 问题是,结果集太大,无法一次全部完成,然后在网页上进行分页和排序。使用现有的存储过程进行分页和排序

在不更改存储过程的情况下,可以将其包装在其他一些sql代码中,以仅以快速方式返回某些结果。

喜欢的东西:

EXEC the_sp限量50为了通过

回答

1

在不改变存储过程的代码,你的选择是相当有限。

你可以做

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 

要停止其返回属于页面不需要的结果将适用于存储过程中的每个语句(而不仅仅是将最终结果返回给客户端),这可能不适合。

相关问题