WEB开发网
开发学院数据库MSSQL Server 使用SQL Server 2005的新函数构造分页存储过程 阅读

使用SQL Server 2005的新函数构造分页存储过程

 2009-10-25 00:00:00 来源:WEB开发网   
核心提示: 下面的存储过程没有将总页数和总条目数返回,如果你有兴趣,使用SQL Server 2005的新函数构造分页存储过程(2),可以自己加上,可以参看http://www.zxbc.cn/html/20090625/71918.html中的下列部分Declare@sqlnvarchar(4000);D

下面的存储过程没有将总页数和总条目数返回,如果你有兴趣,可以自己加上,可以参看http://www.zxbc.cn/html/20090625/71918.html中的下列部分

  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) 

存储过程SQL如下,支持不定列,不定条件,多表联合,排序任意

分页存储过程

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
 
 
-- =============================================
-- Author:    shiwenbin
-- MSN:    jorden008@hotmail.com
-- Email:    jorden008@163.com
-- Create date: 2009-10-20
-- Description:   分页存储过程,根据传递的参数返回查询的受训学员信息
-- Parameters:
-- =============================================
ALTER PROCEDURE [dbo].[StudentPaging] 
    -- Add the parameters for the stored procedure here
    
    @StrSelect varchar(max)=null,    --欲显示的列(多列用逗号分开),例如:id,name
    @StrFrom varchar(max)= null,    --表名称,或者是表连接字符串,多表连接例如:student as s inner join dwinfo as dw on s.dwbh=dw.bh
    @StrWhere varchar(max)=null,    --查询条件,''代表没有条件,单条件或者多条件,多条件例如:name='啊' and id=10
    @StrOrder varchar(max) =null,   --排序列(多个排序列用逗号分开),例如:id desc,name as 
    --@PageCount int output,     --总页数
    --@ItemCount bigint output,     --总记录数
    @PageSize int =null,     --每页显示条数
    @PageIndex int =null     --当前页
    --@ClassCode char(10) =null,    --单位编号(班级编号)   
AS
BEGIN
    SET NOCOUNT ON;
    declare @SqlQuery varchar(max)
    if(@PageIndex=1)
       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)           
           --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)
           --print @SqlQuery
          end
       end
    --set @SqlQuery=@SqlQuery+';select @ItemCount =count(*) from '+@TableName
    --set @PageCount=@ItemCount/@PageSize
    --print '共'+@PageConut+'页'+@ItemCount+'条'
    --print @ItemCount
    print @SqlQuery
    exec (@SqlQuery)
END

上一页  1 2 3 4  下一页

Tags:使用 SQL Server

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接