标签归档:offset和fetch

mssql sqlServer 2012 OFFSET 和 FETCH 使用注意事项


摘要:
下文讲述sqlsever中使用offset fetch进行分页操作时的注意事项,如下所示:
实验环境:sql server 2012



offset fetch功能说明

offset fetch功能主要是用于快速分页。
offset fetch 语法如下所示:

  ORDER BY order_by_expression
    [ COLLATE collation_name ] 
    [ ASC | DESC ] 
    [ ,...n ] 
    [<offset_fetch>]
 
     <offset_fetch> ::=
     { 
         OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
          [
           FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
          ]
     }

offset 举例应用:

       
 create table maomao
(
	keyId int identity,
	writeDate datetime default getdate() 
)
go

---生成基础数据
set nocount on

insert into maomao default values
go 20

set nocount off
 
 ---跳过第一行,显示其余数据
 SELECT keyId,writeDate  FROM  maomao 
    ORDER BY keyId 
     OFFSET 1 ROWS
	 
 ---跳过前5行,显示3行数据
 SELECT keyId,writeDate  FROM  maomao 
    ORDER BY keyId 
     OFFSET 5 ROWS
	FETCH NEXT 3 ROWS ONLY
go
truncate table maomao
drop     table maomao 


注意事项:
1 offset fetch 必须和order by 一起使用
2 FIRST 和 NEXT 是同义词,是为了与 ANSI 兼容而提供的。
3 ROW 和 ROWS 是同义词,是为了与 ANSI 兼容而提供的
4 offset 和 fetch 两个关键字中
offset 表示跳过行数
fetch 表示显示多少行
4.1 offset 可单独使用
4.2 fetch 必须 结合offset一起使用,fetch关键字不可单独使用

mssql sqlserver offset fetch关键字同order by 关键字结合使用,进行分页数据获取


摘要:
下文讲述分页的另类方法,使用offset和fetch关键字分页数据的获取
实验环境:sqlserver 2012



一、offset 获取表中记录,跳过指定行数

例:表test按照keyId 倒序排列,并跳过前3条

  create table test(keyId int identity(1,1),info varchar(10))
  go
  insert into test(info)values('a'),('b'),('c'),('d'),('e'),('f')
  go
   select * from test order by keyId desc  offset 3 rows 
-------输出------
3  c 
2  b
1  a
------------------
drop table test 


二、offset fetch组合应用

offset fetch 组合使用,可达到跳过相应的记录,并返回指定的行数。
例:
offset n rows 跳出相应的行数
fetch next n rows only 返回相应的行数

  create table test(keyId int identity(1,1),info varchar(10))
  go
  insert into test(info)values('a'),('b'),('c'),('d'),('e'),('f')
  go 
  select * from test order by keyId desc 
   offset 3 rows
    fetch next 2 rows only  
    go
-------输出------
3  c 
2  b 
------------------
drop table test