首页 > 程序开发 > .NET开发 > 分享一个sql server 存储过程分页代码
网站建设、切图、企业建站、微信开发 联系QQ:404658186 tel:18716186715
2015
06-14

分享一个sql server 存储过程分页代码

分享一个sql server 存储过程分页代码

sql server中存储过程的执行效率是最高的,在做asp.net项目是经常用到分页功能,所以就把数据库中的分页获取信息写了一个存储过程,方便以后调用,现在把它分享出来。

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER Procedure [dbo].[Proc_PageList2005] 
 @TableName varchar(100), -- 表名 
 @GetFields varchar(4000) = '*', -- 字段名(全部字段为*) 
 @OrderField varchar(3000), -- 排序字段(必须!支持多字段) 
 @WhereCondition varchar(5000) = Null, -- 条件语句(不用加where) 
 @PageIndex int = 1 , -- 指定当前为第几页 
 @PageSize int = 20, -- 每页多少条记录 
 @GroupBy varchar(200), --分组语句(不用加Group by)
 @RecordCount int = 0 output --返回总记录条数 
as 
begin 
 declare @PageCount int -- 返回总页数 
 set @PageCount = 0
 Begin Tran --开始事务 
 
 Declare @sql nvarchar(4000); 
 
 --计算总记录数 
 if(@GroupBy ='' or @GroupBy is null) --无GroupBy的情况
 begin
 set @sql = 'select @RecordCount = count(*) from ' + @TableName 
 if (@WhereCondition<>'' and @WhereCondition is not NULL) 
 set @sql = @sql + ' where ' + @WhereCondition 
 end
 else --有GroupBy的情况
 begin
 set @sql = 'select @Recordcount=count(*) from(select 1 as total from ' + @TableName
 if (@WhereCondition<>'' and @WhereCondition is not NULL) 
 set @sql = @sql + ' where ' + @WhereCondition
 set @sql = @sql + ' group by ' + @GroupBy
 set @sql = @sql + ') as t'
 end
 
 EXEC sp_executesql @sql,N'@RecordCount int OUTPUT',@RecordCount OUTPUT--计算总记录数 
 select @PageCount=CEILING((@RecordCount+0.0)/@PageSize) --计算总页数 
 
 set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @GetFields + ' from ' + @TableName 
 if (@WhereCondition<>'' and @WhereCondition is not NULL) 
 set @sql = @sql + ' where ' + @WhereCondition
 if(@GroupBy <>'' and @GroupBy is not null)
 set @sql = @sql + ' group by ' + @GroupBy 
 
 --处理页数超出范围情况 
 if @PageIndex<=0 
 Set @PageIndex = 1 
 
 if @PageIndex>@PageCount 
 Set @PageIndex = @PageCount 
 
 --处理开始点和结束点 
 Declare @StartRecord int 
 Declare @EndRecord int 
 
 set @StartRecord = (@PageIndex-1)*@PageSize + 1 
 set @EndRecord = @StartRecord + @PageSize - 1 
 
 --继续合成sql语句 
 set @Sql = @Sql + ') as ' + @TableName + ' where rowId between ' + Convert(varchar(50),@StartRecord) + ' and ' + Convert(varchar(50),@EndRecord) 
 
 Exec(@Sql) 
 --------------------------------------------------- 
 If @@Error <> 0 
 Begin 
 RollBack Tran 
 Return -1 
 End 
 Else 
 Begin 
 Commit Tran 
 Return @RecordCount ---返回记录总数 
 End 
end 

最后编辑:
作者:码农一号
这个作者貌似有点懒,什么都没有留下。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复

你的email不会被公开。

*