Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server问题中的分页_Sql Server_Sql Server 2005_Paging - Fatal编程技术网

Sql server SQL Server问题中的分页

Sql server SQL Server问题中的分页,sql-server,sql-server-2005,paging,Sql Server,Sql Server 2005,Paging,我在SQL Server中搜索了分页。我发现大多数解决方案都是这样的 但这不符合我的期望 以下是我的情况: 我在JasperReport上工作,为了导出报告,我只需要将anyselect查询传递到模板中,它就会自动生成报告 例如:我有这样一个select查询: Select * from table A 我不知道表A中的任何列名,因此无法使用 Select ROW_NUMBER() Over (Order By columsName) 我也不希望它按任何列排序 有人能帮我吗 PS:在Ora

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

但这不符合我的期望

以下是我的情况:

我在JasperReport上工作,为了导出报告,我只需要将anyselect查询传递到模板中,它就会自动生成报告

例如:我有这样一个select查询:

Select * from table A
我不知道表A中的任何列名,因此无法使用

Select ROW_NUMBER() Over (Order By columsName)
我也不希望它按任何列排序

有人能帮我吗

PS:在Oracle中,rownum在这种情况下非常有用

Select * from tableA where rownum > 100 and rownum <200
从表格A中选择*其中rownum>100和rownum查看此链接

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


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

我认为,您可以使用sql查询来确定表中有多少列,然后找到“order by”所依赖的适当列。 如何从表中取出列的脚本参考:

您应该使用带有
ORDER BY
行号
——因为没有
ORDER BY
就无法确定行的返回方式。您可以运行同一查询三次,然后以三种不同的顺序返回结果。尤其是旋转木马扫描开始起作用的时候


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

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

您也可以使用下面的查询

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
declare@testtable(
id int,
值1 varchar(100),
值2(整数)
插入@测试值(1,'10/50',50)
插入@测试值(2,'10/60',60)
插入@测试值(3,'10/60',61)
插入@测试值(4,'10/60',10)
插入@测试值(5,'10/60',11)
插入@测试值(6,'10/60',09)
选择*
from(选择(order by(选择0))上方的行号()作为行号,*from@test)test

其中test.rownumberIf如果未指定顺序,则没有顺序。任何页面上都可能返回相同的行。将排序列作为生成器的一个要求。OP提到了行号()以及他/她不想使用它的原因。