2011-06-15 76 views
0

我有以下SQL查询:使用SQL Server 2005,允许做一个存储过程分页

DECLARE @Page int, @RegistriesPerPage int , @FirstRegistry int, @LastRegistry int 
Set @Page=1 
Set @RegistriesPerPage=2 
Set @FirstRegistry = (@Page - 1) * @RegistriesPerPage 
Set @LastRegistry = (@Page * @RegistriesPerPage +1) 


SELECT I.ID, Name, ROW_NUMBER() OVER (ORDER BY ID DESC) as Counter 
FROM Items I 
WHERE Counter > @FirstRegistry AND Counter < @LastRegistry 

group by Id,Name 

我试着让它工作,但aparently我不能,因为我不能用“计数器”在where子句(连ROW_NUMBER()

我怎么可以创建存储过程,它有两个参数(每页项目数和页面返回)

+0

不要。使用Linq2SQL或EF。您可以使用HAVING而不是所选答案的子查询。 – SQLMason 2012-09-08 03:27:36

回答

1

您可以使用导出查询:?

SELECT * FROM 
(
    SELECT I.ID, Name, ROW_NUMBER() OVER (ORDER BY ID DESC) as Counter 
    FROM Items I  
    group by Id,Name 
)a 
WHERE Counter > @FirstRegistry AND Counter < @LastRegistry 
+0

啊,好的。我懂了。事情是,我必须从选择做出选择才能做到这一点? – Jose3d 2011-06-15 16:21:49

+0

是的。在这种情况下,您将能够在'WHERE'中使用原始查询中的字段别名。 – a1ex07 2011-06-15 16:24:42

+0

或者你也可以用CTE做同样的事情,如果你更喜欢它的派生查询 - 在这种情况下没有性能差异。 – a1ex07 2011-06-15 16:26:46

相关问题