2011-06-15 72 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

相關問題