2012-10-08 71 views
1

我在SQL Server中搜索了分頁。我發現大部分的解決方案看起來像在SQL Server問題中尋呼

What is the best way to paginate results in SQL Server

但它不符合我的期望。

這裏是我的情況:

我的JasperReport的工作,爲的是:出口報告我只需要通過任何選擇查詢到模板,它會自動生成輸出報表

EX:我有這樣的選擇查詢:

Select * from table A 

我不知道表A.任何列名所以我不能使用

Select ROW_NUMBER() Over (Order By columsName) 

而且我也不希望它按任何列排序。

任何人都可以幫助我做到這一點?

PS:在Oracle中,rownum在這種情況下非常有用。

Select * from tableA where rownum > 100 and rownum <200 

Paging with Oracle

+4

如果您沒有指定一個訂單,那就沒有一個。同一行_could_可以在任何頁面上返回。 – HABO

+0

爲發生器制定訂單欄。 – 2012-10-08 03:05:17

回答

0

退房此鏈接

http://msdn.microsoft.com/en-us/library/ms186734.aspx

SQL Server有類似的功能ROW_NUMBER。雖然它表現有點不同。

SQL Server不保證行順序,除非您已按順序指定了一列。我會建議你給一個具有獨特價值的條款。

+0

該OP提到了ROW_NUMBER()以及爲什麼他/她不想使用它。 – 2012-10-08 03:05:40

2

應該使用ROW_NUMBERORDER BY - 因爲沒有一個ORDER BY存在行如何返回任何決定。您可以運行相同的查詢三次,並以三種不同的順序返回結果。特別是如果旋轉掃描發揮作用。

因此,除非您希望報表能夠向多個頁面上的用戶顯示相同的行,或者某些行從不在任何頁面上,否則您需要找到一種方法來對結果集進行排序以使其具有確定性。

0

感謝您的幫助。由於命令時,需要分頁時MS SQL Server,所以我使用ResultSetMetaData來獲取列的名稱,並做分頁。

0

您也可以使用下面的查詢。

declare @test table(
id int, 
value1 varchar(100), 
value2 int) 

insert into @test values(1,'10/50',50) 
insert into @test values(2,'10/60',60) 
insert into @test values(3,'10/60',61) 
insert into @test values(4,'10/60',10) 
insert into @test values(5,'10/60',11) 
insert into @test values(6,'10/60',09) 

select * 
from (select row_number() over (order by (select 0)) as rownumber,* from @test)test 
where test.rownumber<=5