如何从SQL Server存储过程返回行和变量
问题描述:
希望这很简单。我正在优化一个返回约500行以上的存储过程。我的计划是批量返回行,直到没有更多的行获得。如何从SQL Server存储过程返回行和变量
例如,我会得到0-49行 - 那么50-99,然后100-149,等等..
我使用下面的SQL代码来实现这一点:
CREATE PROCEDURE [dbo].[mySP]
@rowstart int,
@rowend int
AS
WITH MainQuery AS
(
HUGE SELECT STATEMENT HERE
)
select * from MainQuery where row between @rowstart and @rowend
当我执行这个SP,我简单地传递在rowstart和rowend值,它将返回我想要完美的行的范围。
问题是,我想知道每个查询后都有更多的行。我认为我可以通过在MainQuery块完成后返回@@ ROWCOUNT来完成该操作,但是我不知道如何在每次执行SP后获取返回的行的范围和@@ ROWCOUNT的值。
当我做出返回50行的初始查询时,如果我可以知道有503个TOTAL表行,我可以做一些简单的数学计算(503/50)并计算出需要多少次调用SP。任何帮助表示赞赏!
答
其他的答案会告诉你如何得到答案了存储过程的...
我想指出的是,@@ROWCOUNT
将@rowend - @rowstart + 1
。所以,除了最后一页你有50行。对于最后一页,您可以从DataTable中获取客户端的行数。
你需要的是这样的事情,如果你从SQL希望
WITH MainQuery AS
(
HUGE SELECT STATEMENT HERE
)
select * from MainQuery
CROSS JOIN
(SELECT COUNT(*) AS TotalRows FROM MainQuery) MC
where row between @rowstart and @rowend
或
WITH MainQuery AS
(
HUGE SELECT STATEMENT HERE
)
SELECT * INTO #foo
select * from #foo F
CROSS JOIN
(SELECT COUNT(*) AS TotalRows FROM #foo) M
where F.row between @rowstart and @rowend
或
WITH MainQuery AS
(
HUGE SELECT STATEMENT HERE
)
SELECT * INTO #foo
select * from #foo F where F.row between @rowstart and @rowend
SELECT @outparam = COUNT(*) FROM #foo
这是一个寻呼类型需要? - 即你并不总是需要503行? – 2011-01-12 00:42:01