文章目录
-
- SQL分页存储过程实例
- 核心源码
- 分页存储过程开始创建 IF EXISTS (SELECT name FROM sysobjects WHERE name = 'PageShowOne' AND type = 'P') DROP PROCEDURE PageShowOne GO CREATE Proc PageShowOne @PageSize int=10 ,--每页显示的记录数 @PageCurrent int=1 ,--当前要显示的页号 @FdName varchar(100)='' ,--主键名或者标识列名 @SelectStr varchar(2000)='', --select子句,不包含select关键字,如:*或者Id,UserId,UserName等。 @FromStr varchar(1000)='', --from子句,不包含from关键子,如:myTable或者myTable,yourTable @WhereStr varchar(2000)='', --Where子句,不包含where关键字,如空的,或者 id>2 等 @OrderByStr varchar(1000)='',--order by 子句,不包含order by 子句 ,如id desc,UserId asc 等 @CountRows int=0 output, --返回记录总数 @CountPage int=0 output --返回总页数 as --------定义局部变量--------- declare @Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号 declare @OrderBySqls varchar(1000) --order by 子句 declare @WhereSqls varchar(2000) --where 子句 declare @Sqls nvarchar(4000) --最终组合成的Sqls语句 declare @TmpStr varchar(2000) --临时
- if @OrderByStr <> '' set @OrderBySqls = ' order by '+@OrderByStr else set @OrderBySqls = ''
- if @WhereStr <> '' set @WhereSqls = ' where ('+@WhereStr+')' else set @WhereSqls = ''
- set @TmpStr = @WhereSqls --如果显示第一页,可以直接用top来完成 if @PageCurrent<=1 begin select @Id1=cast(@PageSize as varchar(20)) exec('select top '+@Id1+' '+@SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls) goto LabelRes end
- select @Id1=cast(@PageSize as varchar(20)) ,@Id2=cast((@PageCurrent-1)*@PageSize as varchar(20))
- if @WhereSqls <> '' set @WhereSqls = @WhereSqls + ' and (' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+'))' else set @WhereSqls = ' where ' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+')'
- set @Sqls = 'select top '+@Id1+ ' '+ @SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls exec (@Sqls)
SQL分页存储过程实例
提示:这里可以添加技术概要
核心源码
提示:Delphi调用SQL分页存储过程实例
下面是一个支持任意表的 SQL SERVER2000分页存储过程