mssql 存储过程学习中 [5] 记录集分页
2010-08-08 23:22
483 查看
直接拷贝shiwenbin大的过来用,没仔细研究呢.呵呵.大体用的row_number().
相当好用,支持多表联合多条件查询
相当好用,支持多表联合多条件查询
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go --Declare @sql nvarchar(4000); --Declare @totalRecord int; ----计算总记录数 --if (@SqlWhere ='''' or @SqlWhere='' or @sqlWhere is NULL) --set @sql = 'select @totalRecord = count(*) from ' + @TableName --else --set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere --EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT-- 计算总记录数 -- ----计算总页数 -- --select @TotalPage=@totalRecord --CEILING((@totalRecord+0.0)/@PageSize) -- ============================================= -- Author: shiwenbin -- MSN: jorden008@hotmail.com -- Email: jorden008@163.com -- Create date: 2009-10-20 -- Description: 分页存储过程,根据传递的参数返回分页的结果 -- Parameters: -- ============================================= --CREATE PROCEDURE Pagination ALTER PROCEDURE Pagination -- Add the parameters for the stored procedure here @StrSelect varchar(2000)=null, --欲显示的列(多列用逗号分开),例如:id,name @StrFrom varchar(2000)= null, --表名称,或者是表连接字符串,多表连接例如:student as s inner join dwinfo as dw on s.dwbh=dw.bh @StrWhere varchar(2000)=null, --查询条件,''代表没有条件,单条件或者多条件,多条件例如:name='啊 ' and id=10 @StrOrder varchar(2000) =null, --排序列(多个排序列用逗号分开),例如:id desc,name as --@PageCount int output, -- 总页数 @ItemCount bigint output, --总记录数 @PageSize int =50, --每页显示条数 @BeginIndex int=1,--记录开始数 @DoCount bit =0 --是否统计总数,为0不统计,为1统计 --@PageIndex int =1 --当前页 --@ClassCode char(10) =null, --单位编号(班级编号) AS BEGIN SET NOCOUNT ON; Declare @sql nvarchar(4000); Declare @totalRecord int; --计算总记录数 if @DoCount = 1 begin if (@StrWhere ='''' or @StrWhere='' or @StrWhere is NULL) set @sql = 'select @totalRecord = count(*) from ' + @StrFrom else set @sql = 'select @totalRecord = count(*) from ' + @StrFrom + ' where ' + @StrWhere EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@ItemCount OUTPUT--计算总记录数 end declare @SqlQuery varchar(max) -- if(@PageIndex=1) if(@BeginIndex=1 or @BeginIndex=0 or @BeginIndex <0) begin if(@StrWhere is null)--if(@StrWhere='') set @SqlQuery='select top '+convert(varchar,@PageSize) + ' row_number() over(order by '+@StrOrder+' ) as RowNumber,'+@StrSelect+ ' from '+@StrFrom; else --set @sql='select top @PageSize * from @TableName order by id desc'; --select top @PageSize * from @TableName order by id desc; set @SqlQuery='select top '+convert(varchar,@PageSize) + ' row_number() over(order by '+@StrOrder+' ) as RowNumber,'+@StrSelect+' from '+@StrFrom+' where '+@StrWhere; --exec (@SqlQuery) -- @SqlQuery end else begin if(@StrWhere is null)--if(@StrWhere='') begin set @SqlQuery='with cte as ( select row_number() over(order by '+@StrOrder+' ) as RowNumber,'+@StrSelect+' from '+@StrFrom+' ) select * from cte where RowNumber between '+ --convert(varchar,((@PageIndex-1)*@PageSize)+1)+' and '+ -- -- convert(varchar,@PageIndex*@PageSize) convert(varchar,@BeginIndex)+' and '+ convert(varchar,@BeginIndex+@PageSize-1) --print @SqlQuery end else begin set @SqlQuery='with cte as ( select row_number() over(order by '+@StrOrder+' ) as RowNumber,'+@StrSelect+' from '+@StrFrom+' where '+@StrWhere+' ) select * from cte where RowNumber between '+ --convert(varchar,((@PageIndex-1)*@PageSize)+1)+' and '+ -- -- convert(varchar,@PageIndex*@PageSize) convert(varchar,@BeginIndex)+' and '+ convert(varchar,@BeginIndex+@PageSize-1) --print @SqlQuery end end --set @SqlQuery=@SqlQuery+';select @ItemCount =count(*) from '+@TableName --set @PageCount=@ItemCount/@PageSize --print '共'+@PageConut+'页'+@ItemCount+'条 ' --print @ItemCount print @SqlQuery print @ItemCount exec (@SqlQuery) return @ItemCount END
相关文章推荐
- mssql 存储过程学习中 [2]获取多个记录集及多次使用存储过程
- ASP.Net 学习点滴---存储过程分页
- 一个分页存储过程的学习
- Oracle分页存储过程及Package学习(转载)
- [跟着hsp步步学习系统]oracle培训学习集锦全360度扫描(10)一个分页存储过程
- 黑马程序员_学习日记72_724ASP.NET(ViewState、Cookie、Session、登录、分页存储过程)
- 一个通用MSSQL海量数据分页存储过程
- MSSQL 存储过程分页 测试 2
- [MSSQL]mssql海量高效分页存储过程
- 4000 oracle学习分页存储过程和jdbc调用
- c#学习之-c#通过sql存储过程实现分页
- 在Delphi 和 .NET中 实现分页功能的存储过程(返回多个记录集)
- [MSSQL]mssql海量高效分页存储过程
- {传智播客} (学习笔记)--Java调用存储过程实现Oracle数据库分页
- [传智播客学习日记]分页查询的存储过程
- mssql 高效的分页存储过程分享
- mssql查询分页存储过程SpPageOrder/proc_wuhan_getpages )
- mssql高效的分页存储过程
- MSSQL数据库:存储过程学习
- 自定义分页的存储过程的学习