不知道SQL Server 2005中有没有类似MySQL中limit这样的函数,能够通过SQL语句直接分页查询数据要求:
  1、不使用存储过程和临时表,只用JDBC连接数据库
  2、不使用第三方工具(如Hibernate)
  3、根据下面的建表语句给出完整的分页SQL,只提供思路的不给分
  4、最好能考虑效率问题建表语句如下:
CREATE TABLE [dbo].[tbl_user](
[id] [int] IDENTITY(1,1) NOT NULL, --人员编号
[user_name] [varchar](64) COLLATE Chinese_PRC_CI_AS NOT NULL, --登录名
[display_name] [varchar](64) COLLATE Chinese_PRC_CI_AS NOT NULL, --显示用户名
[password_hash] [varchar](32) COLLATE Chinese_PRC_CI_AS NOT NULL, --密码
[is_protect] [bit] NULL DEFAULT ((0)), --是否受保护
[status] [varchar](8) COLLATE Chinese_PRC_CI_AS NULL, --状态
[is_delete] [bit] NOT NULL DEFAULT ((0)), --是否被删除
 CONSTRAINT [PK_tbl_user] PRIMARY KEY CLUSTERED 
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

解决方案 »

  1.   

    有自增列就好办了..
    select * from [tbl_user] where id between n and ma
      

  2.   

    SQL 2005的ROW_NUMBER()实现分页功能DECLARE @pagenum AS INT, @pagesize AS INT
    SET @pagenum = 2
    SET @pagesize = 3
    SELECT *
    FROM (SELECT ROW_NUMBER() OVER(ORDER BY newsid DESC) AS rownum, 
            newsid, topic, ntime, hits
          FROM news) AS D
    WHERE rownum BETWEEN (@pagenum-1)*@pagesize+1 AND @pagenum*@pagesize
    ORDER BY newsid DESC 
      

  3.   

    这样恐怕不行,因为表中可能有删除的数据,例如id为1、2、3...10,如果9被删掉了,再between 1 and 10,就会得到1、2、3...8、10、11的