存储过程分页

create database Test
on primary ( name='Test_Data.mdf',
  filename
='D:/我的资料/sql/备份/Test_Data.mdf'
)
log on
(
  name
='Test_Data.ldf',
  filename
='D:/我的资料/sql/备份/Test_Data.ldf'
)

if object_id('tb') is not null drop table tb
create table tb
(
  Col
int
)
insert into tb select top 50 number from master..spt_values where type='P' and number>0

create proc SplitPage
(
 
@TableName nvarchar(50),
 
@PageSize int,--每页显示的数量
  @CurrentPage int,--当前第几页
  @PageCol nvarchar(50),--排序字段
  @OrderNo nvarchar(50)--排序方式(DESC,ASC)
)
as
/*
测试用的
declare @PageCol nvarchar(50)
declare @TableName nvarchar(50)
declare @OrderNo nvarchar(50)
declare @PageSize int
declare @CurrentPage int
set @PageCol='Col'
set @TableName='tb'
set @OrderNo='DESC'
set @PageSize=10
set @CurrentPage=4
*/
declare @sql nvarchar(1000)
set @sql=''
set @sql='
;with hgo as
(
  select *,row_number() over(
  order by
'+@PageCol+' '+@OrderNo+') rank
  from
'+@TableName+'
)
'
set @sql=@sql+'select Col from hgo where rank between '+ltrim((@CurrentPage-1)*@PageSize+1)+' and '+ltrim(@CurrentPage*@PageSize)
--print @sql
exec (@sql)

exec SplitPage 'tb',10,1,'Col','DESC'

Col
-----------
50
49
48
47
46
45
44
43
42
41

(
10 行受影响)

exec SplitPage 'tb',10,3,'Col','DESC'
Col
-----------
30
29
28
27
26
25
24
23
22
21

(
10 行受影响)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值