1

我在 SQL Server 中搜索了分页。我发现大多数解决方案都是这样的

在 SQL Server 中对结果进行分页的最佳方法是什么

但这并不符合我的期望。

这是我的情况:

我在 JasperReport 上工作,为此:要导出报告,我只需将任何 Select 查询传递到模板中,它将自动生成报告

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

使用 Oracle 进行分页

4

5 回答 5

2

应该ROW_NUMBER与- 一起使用,ORDER BY因为没有 aORDER BY就无法确定如何返回行。您可以运行相同的查询 3 次,然后以三种不同的顺序返回结果。特别是如果旋转木马扫描开始发挥作用。

因此,除非您希望您的报告有可能在多个页面上向用户显示相同的行,或者某些行从不在任何页面上,否则您需要找到一种方法来对结果集进行排序以使其具有确定性。

于 2012-10-08T09:35:26.433 回答
0

在我看来,您可以使用 sql 查询来找出一个表中有多少列,然后找出一个合适的列供 'order by' 依赖。如何获取表列的脚本参考:How can I get column names from a table in SQL Server?

于 2012-10-08T04:49:25.023 回答
0

感谢您的所有帮助。因为在MS SQL Server中分页时需要order by,所以我使用 ResultSetMetaData 来获取 Columns 名称并进行分页。

于 2012-10-09T06:17:04.390 回答
0

看看这个链接

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

SQL Server 有类似的函数 ROW_NUMBER。虽然它的行为有点不同。

除非您在 order by 子句中指定了列,否则 SQL Server 不保证行顺序。我建议您给出具有唯一值的 order by 子句。

于 2012-10-08T02:32:12.860 回答
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
于 2013-02-28T04:50:02.990 回答