SqlServer 分页存储过程

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go





-- =============================================
-- Author:		<许刚>
-- Create date: <2011/9/22>
-- Description:	<通用存储过程>
-- =============================================
ALTER PROC [dbo].[sp_CommonPageSplit]
      @curPage INT , --当前页
      @pageSize INT , --没页数据数量
      @tbName VARCHAR(1000) ,--分页的表名
      @columNames VARCHAR(1000) ,--需要查询字段
      @orderBy VARCHAR(200) ,--排序方式
      @condition VARCHAR(2000) ,--查询条件
      @totalPage INT = 0 OUTPUT ,
      @totalCount INT = 0 OUTPUT
AS 
      BEGIN
            DECLARE @curPageData INT
            DECLARE @sqlStr VARCHAR(6000)
            DECLARE @sqlCountStr NVARCHAR(4000)
            BEGIN
                  IF @condition != '' 
                     SET @condition = ' where ' + @condition
                  IF @orderBy != '' 
                     SET @orderBy = ' order by ' + @orderBy
                  PRINT @condition
                  SET @sqlCountStr = 'select @totalCount=count(1) from  ' + @tbName + @condition
                  EXEC sp_executesql @sqlCountStr, N'@totalCount int output', @totalCount OUT
                  IF @pageSize < 1 
                     BEGIN
                           SET @pageSize = 1
                     END
                  IF @totalCount % @pageSize = 0 
                     BEGIN
                           SET @totalPage = @totalCount / @pageSize
                     END
                  ELSE 
                     BEGIN
                           SET @totalPage = @totalCount / @pageSize + 1
                     END
                  IF @curPage > @totalPage 
                     BEGIN
                           SET @curPage = @totalPage
                     END
                  IF @curPage < 1 
                     BEGIN
                           SET @curPage = 1
                     END
                  SET @curPageData = @totalCount - ( @curPage - 1 ) * @pageSize
                  SET @sqlStr = '   With SQLPaging  
			As  
			(  
			Select Top(' + CAST(@pageSize * @curPage AS VARCHAR(60)) + ') ROW_NUMBER() OVER (' + @orderBy
                      + ') as resultNum, ' + @columNames + '  
				FROM ' + @tbName + @condition + @orderBy + '  
			)  
			select * from SQLPaging where resultNum > ' + CAST(( @curPage - 1 ) * @pageSize AS VARCHAR(60)) 
                  PRINT @sqlStr
                  EXECUTE(@sqlStr)
            END
      END




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值