分页&使用现有存储过程进行排序

时间:2010-07-12 10:32:32

标签: sql sql-server tsql

我有一个返回大型结果集的旧存储过程。 问题是结果集太大而无法立即获取所有内容,然后在Web端进行分页和排序。

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

类似的东西:

EXEC the_sp LIMIT 50 ORDER BY A

2 个答案:

答案 0 :(得分: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

要在显示的页面之后停止它返回属于页面的不需要的结果

但是因为这将适用于存储过程中的每个语句(不仅仅是最后一个将结果返回给客户端),这可能不合适。

答案 1 :(得分:0)

请参阅:SQL Server 2005 Paging – The Holy Grail(需要免费注册)(并适用于SQL Server 2005以后)