【问题标题】:Pagination on SQL Server 2008SQL Server 2008 上的分页
【发布时间】:2014-01-14 21:22:55
【问题描述】:

我试图使用分页从 SQL SERVER 2008 获取数据。

我的程序是:

CREATE PROC Paginate
@PageSize int, @PageNumber int 
AS 
Declare @RowStart int 
Declare @RowEnd int 
if @PageNumber > 0 
Begin 
SET @PageNumber = @PageNumber -1 
SET @RowStart = @PageSize * @PageNumber + 1; 
SET @RowEnd = @RowStart + @PageSize - 1 ; 
With claim_user_info_paginate AS 
 ( SELECT userNbr, userName, 
   ROW_NUMBER() OVER (order by userNbr) as UserNumber 
   FROM claim_user_info ) 
select * 
from claim_user_info_paginate 
Where UserNumber >= @RowStart and UserNumber <= @RowEnd
END

我需要连续获取记录,但上面的过程只返回前 10 个。在这种情况下,我应该怎么做才能使用 java 在我的表中连续获取所有记录。

我的java代码:

String sql="exec Paginate 10,1";
resultSet = statement.executeQuery(sql); 

我尝试循环查询,但我不断得到相同的结果。有人可以说我在哪里还需要更正。

【问题讨论】:

  • 在循环中,你改变了sql字符串吗?所以从 String sql="exec Paginate 10,1";String sql="exec Paginate 10,2"; 或者至少使用计数器来增加页码?

标签: java mysql sql sql-server sql-server-2008


【解决方案1】:

使用这个表值函数:

ALTER FUNCTION [dbo].[GetPagedData] 
(   
    -- Add the parameters for the function here
    @pagesize int, 
    @pageindex int
)
RETURNS TABLE 
AS
RETURN 
(

     SELECT TOP (@pagesize) * ,Row_number() Over(order by a.ID) as count FROM 
     (
          SELECT *,
          ROW_NUMBER() OVER (ORDER BY ID) AS num              
          FROM dbo.Employees where IsActive=1
     ) AS a
     WHERE num > @pageindex*@pagesize
)

这样使用 select * from dbo.GetPagedData(pagesize,pageindex) 即从 dbo.GetPagedData(20,0) 中选择 * 注意:页面索引从 0 开始。

在Java中通过每次递增pageindex来循环这个函数。

【讨论】:

    【解决方案2】:

    我已经创建了分页的存储过程,将其与您的进行比较,然后尝试:

    ALTER PROCEDURE [dbo].[Sp_get_persons] (@pageNo   INT, 
                                            @pageSize INT) 
    AS 
      BEGIN 
          SELECT id, 
                 name, 
                 [desc], 
                 [address], 
                 phone, 
                 email 
          FROM   (SELECT id, 
                         name, 
                         [desc], 
                         [address], 
                         phone, 
                         email, 
                         Row_number() 
                           OVER ( 
                             ORDER BY id ) AS RowNum 
                  FROM   persons.dbo.person) person 
          WHERE  person.rownum BETWEEN ( ( @pageNo - 1 ) * @pageSize + 1 ) AND ( 
                                       @pageNo * @pageSize ) 
      END 
    

    【讨论】:

      猜你喜欢
      • 2015-09-29
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 2014-08-02
      • 1970-01-01
      相关资源
      最近更新 更多