分页存储过程 BY Bndy

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
-- Author Bndy
--
QQ/MSN 81795705/bndy5337@msn.com
--
Email bndy5337@163.com
--
HomePage http://www.bndy.net

alter PROCEDURE [ dbo ] . [ up_Pagination ]
@tableName nvarchar ( 50 ),
@primaryKey nvarchar ( 20 ),
@selectFileds nvarchar ( 100 ) = N ' * ' ,
@condition nvarchar ( 1000 ) = N ' 1>0 ' ,
@sortString nvarchar ( 100 ) = N ' ID DESC ' ,
@pageIndex int = 0 ,
@pageSize int = 10
AS

BEGIN
SET NOCOUNT ON ;

IF @selectFileds = '' OR @selectFileds IS NULL
SET @selectFileds = N ' * '

IF @condition = '' OR @condition IS NULL
SET @condition = N ' 1>0 '

IF @sortString = '' OR @sortString IS NULL
SET @sortString = N ' ' + @primaryKey + ' desc '

ELSE
IF @primaryKey <> '' AND @primaryKey IS NOT NULL AND CHARINDEX ( @primaryKey + ' ' , @sortString , 0 ) < 0
SET @sortString = @sortString + N ' , ' + @primaryKey + ' desc '

DECLARE @sql nvarchar ( 4000 )
SET @sql = N ' if (SELECT OBJECT_ID( '' #tmpTable '' )) IS NOT NULL DROP TABLE #tmpTable; '

SET @sql = @sql + (N ' SELECT *, ROW_NUMBER() OVER(ORDER BY ' + @sortString + ' ) AS ROWNUMBER INTO #tmpTable FROM ' + @tableName + ' WHERE ' + @condition + ' ORDER BY ' + @sortString + '' ) + ' ; '

IF @pageIndex = 0
SET @sql = @sql + N ' SELECT TOP ' + rtrim ( @pageSize ) + ' ' + @selectFileds + ' FROM #tmpTable ORDER BY ' + @sortString
ELSE
SET @sql = @sql + N ' SELECT TOP ' + rtrim ( @pageSize ) + ' ' + @selectFileds + ''
+ ' FROM #tmpTable '
+ ' WHERE ROWNUMBER > ( '
+ ' SELECT MAX(ROWNUMBER) FROM ( '
+ ' SELECT TOP ' + rtrim (( @pageIndex ) * @pageSize ) + ' ROWNUMBER FROM #tmpTable ORDER BY ' + @sortString
+ ' ) AS tbl '
+ ' ) '
+ ' ORDER BY ' + @sortString

exec ( @sql )

-- 返回总记录数
declare @rowCount int , @sqlRowCount nvarchar ( 4000 )
set @sqlRowCount = ' SELECT @rowCount = COUNT(*) FROM ' + @tableName + ' WHERE ' + @condition
exec sp_executesql @sqlRowCount , N ' @rowCount int output ' , @rowCount output
return @rowCount

END

 

转载于:https://www.cnblogs.com/bndy/articles/1692151.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值