我有一个返回大型结果集的旧存储过程。 问题是结果集太大而无法立即获取所有内容,然后在Web端进行分页和排序。
在不更改存储过程的情况下,可以将其包装在其他一些sql代码中,以便快速恢复某些结果。
类似的东西:
EXEC the_sp LIMIT 50 ORDER BY A
答案 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以后)