求助SQL Server 2005 非存储过程分页问题

梦情 2010-03-24 01:55:11
不知道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]
...全文
34 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
梦情 2010-03-24
  • 打赏
  • 举报
回复
这样恐怕不行,因为表中可能有删除的数据,例如id为1、2、3...10,如果9被删掉了,再between 1 and 10,就会得到1、2、3...8、10、11的

[Quote=引用 1 楼 fredrickhu 的回复:]
SQL code
有自增列就好办了..
select * from [tbl_user] where id between n and ma
[/Quote]
dawugui 2010-03-24
  • 打赏
  • 举报
回复
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
--小F-- 2010-03-24
  • 打赏
  • 举报
回复
有自增列就好办了..
select * from [tbl_user] where id between n and ma

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧