我的通用分页存储过程

我的通用分页

 (by dragonimp)

考虑了好久,一直想不好用什么方案好。

综合了各种方法写了自己的分页,准备在其他过程中调用。

CREATE PROCEDURE SelectPagedSQL
(
 @SQL nvarchar(512),
 @IndexField nvarchar(100),
 @PageSize int=10,
 @PageIndex int=1,
 @Sort nvarchar(128)=@IndexField,
 @TotalCount int=0 output
)
 AS
declare @strSQL nvarchar(1024)

set @strSQL='SELECT * FROM
  (SELECT TOP '+str(@PageSize)+' * FROM
  (SELECT TOP '+str(@PageSize*@PageIndex)+' * FROM
  ('+@SQL+') AS t0
  ORDER BY '+@IndexField+' ASC) AS t1
  ORDER BY '+@IndexField+' DESC) AS t2
  ORDER BY ' +@Sort
  +'
  set nocount on
  select @TotalCount=count(*) from ('+@SQL+') as t0'


exec sp_executesql
 @strSQL,
 N'@TotalCount int=0 OUTPUT',
 @TotalCount=@TotalCount OUTPUT
GO

经过测试,发现一个问题

在写这个的时候,一直拿不准要用id>max(id)还是直接top n,不知道哪种更快。

现在发现直接top是不行的,因为这样如果要的页面超出了表的范围,这样还是会得到记录的。也就是说这个是不可能出现没有记录的情况。所以,还是要改为max的方法。

别人有写了一个max的,但是他的输入参数不好,要指定tablename,我这个可以指定sql。速度上我这个慢了一点点,等我改用max看看是不是因为top的原因。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值