加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

按页取得数据

发布时间:2020-12-12 15:39:54 所属栏目:MsSql教程 来源:网络整理
导读:有两种写法,内容在SQL Server 2005下测试通过 ? 基础表信息: CREATE TABLE [dbo].[Student]( ?[ID] [int] IDENTITY(1,1) NOT NULL, ?[Name] [nchar](20) COLLATE Chinese_PRC_CI_AS NULL, ?[Age] [int] NULL, ?[RegisterTime] [datetime] NULL, ?CONSTRAIN

有两种写法,内容在SQL Server 2005下测试通过

?

基础表信息:

CREATE TABLE [dbo].[Student](
?[ID] [int] IDENTITY(1,1) NOT NULL,
?[Name] [nchar](20) COLLATE Chinese_PRC_CI_AS NULL,
?[Age] [int] NULL,
?[RegisterTime] [datetime] NULL,
?CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED
(
?[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

方法1):

declare @pageNum int
declare @pageSize int
set @pageNum = 2
set @pageSize = 10

select Top (@pageSize) * from Student where ID not in (select top (@pageSize* (@pageNum -1)) ID from Student order by ID) order by ID

?

方法2)

declare @pageNum int
declare @pageSize int
set @pageNum = 2
set @pageSize = 10

select * from
?(select top(@pageSize) *
? from (select top (@pageSize* @pageNum) * from Student order by ID) T1
? order by T1.ID desc) T2
??? order by T2.ID

?

方法1)的思路是先排序后取出前PageNum-1页的数据,然后再取得不包含其中的哪些数据,排序后取得前PageSize的数据

方法2)的思路是正向排序后,先取得前PageSize *PageNum页的数据,然后再逆向排序后,取得前PageSize的数据,然后再正向排序。

?

语法注意点:

1)Sqlserver中使用TOP N是,如果N是一个常数,如 TOP 10 ,则可以不用加括号。 否则,如果是一个 表达式 如 TOP (10*2) 或者 TOP(@PageSize*@PageNum) 则 必须加括号,否则编译不通过

2)多级嵌套时,必须为临时表创建一个别名,因为order by ID 这时候是认不出来的,必须要加上别名前缀。 参照方法二中的写法

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读