zoukankan      html  css  js  c++  java
  • 查询分页的存储过程

    cjpvvv (苹果虫子) 的
     
    代码
    if (object_id(N'syspr_TablePaginationSearch',N'P'is not null)
    drop procedure dbo.syspr_TablePaginationSearch
    go
    create procedure syspr_TablePaginationSearch
    (
    @SelectField nvarchar(512)='*'     -- Select语句字段,调用的时候不要输入"select" 
    ,@FormTables nvarchar(512)      -- Form子句,表名,包括架构名,调用的时候不要输入"from" 
    ,@WhereField nvarchar(512)=null     -- Where语句、判断字段,调用的时候不要输入"where" 
    --
    ---------------------------------------------------
    ,@OverPartitionField nvarchar(512)=null   -- 分区字段,
    ,@OverOrderField nvarchar(512)     -- 分页字段,主要排序字段,必须
    ,@GroupField nvarchar(512)=null     -- 分组字段
    ,@HavingField nvarchar(512)=null    -- 分组判断条件
    ,@OrderField nvarchar(512)=null     -- 排序字段 
    --
    ---------------------------------------------------
    ,@PageSize int=10        -- 页长
    ,@Page int=1         -- 页
    --
    ---------------------------------------------------
    ,@ErrorProcedure nvarchar(128)=null output -- 错误存储过程名
    ,@ErrorNumber int=0 output      -- 错误编号
    ,@ErrorMessage nvarchar(512)=null output -- 错误信息
    )
    as
    begin
    --定义第一行记录
    declare @firstRow int;
    --定义最后一条记录
    declare @lastRow int;--设置第一条记录
    set @firstRow=((@Page-1)*@PageSize)+1;
    --设置最后一条记录
    set @lastRow=@firstRow+@PageSize;--定义查询SQL字段
    declare @sqlString nvarchar(512);
    --定义Select语句,内查询使用
    declare @selectString nvarchar(512);
    --定义Where字段,内查询使用
    declare @whereString nvarchar(512);
    --定义Form子句,内查询使用
    declare @formString nvarchar(512);
    --定义分组字段,内查询使用
    declare @groupString nvarchar(512);
    --定义Having子句,内查询使用
    declare @havingString nvarchar(512);
    --定义排序字段,外查询使用
    declare @OrderString nvarchar(512);--组装Select子句-----------------------------------
    set @SelectField=isnull(@SelectField,N' * ');
    if(@SelectField='')
       
    set @SelectField=N' *' ;
    --组装select子句到row_number()
    set @selectString=N' select '+ @SelectField+ ', Row_Number() over( ';
    --组装到分区partition by 表达式
    set @OverPartitionField=isnull(@OverPartitionField,N'');
    if (@OverPartitionField<>'')
       
    set @selectString= @selectString+ ' partition by '+ @OverPartitionField;
    --组装到排序分页order by 表达式
    set @OverOrderField=isnull(@OverOrderField,N'');
    if (@OverOrderField<>'')
       
    set @selectString= @selectString+ ' order by '+ @OverOrderField+ N') as RowNumber ';
    --over---------------------------------------------
    --
    组装Form子句------------------------------------
    set @formString= N' from '+ @FormTables;
    --组装Where判断子句------------------------------
    set @WhereField=isnull(@WhereField,N'');
    if(@WhereField<>'')
       
    set @whereString=N' where '+ @WhereField;
    else
       
    set @whereString=N'';
    --where判断子句组装完毕-------------------------
    --
    组装group by分组子句--------------------------
    set @GroupField=isnull(@GroupField,N'');
    if (@GroupField<>'')
    begin
       
    set @groupString= N' group by '+ @GroupField;   --组装having分组判断条件
       set @HavingField= isnull(@HavingField,N'');
       
    if (@HavingField<> N'')
        
    set @havingString= N' having '+ @HavingField;
       
    else
        
    set @havingString=N'';
    end
    else
    begin
       
    set @groupString= N'';
       
    set @havingString=N'';
    end
    --over-------------------------------------------
    --
    组装order by外排序子句-----------------------
    set @OrderField=isnull(@OrderField,N'');
    if (@OrderField<>'')
       
    set @OrderString= N' order by '+ @OverOrderField+ N' , '+ @OrderField;
    else
       
    set @OrderString= N'';
    --如果@groupString不为空,则外排序不起作用
    if (@groupString<>N'')
       
    set @OrderString=N'';
    --over-------------------------------------------
    --
    组装分页查询语句
    set @sqlString=
       N
    'select * '+
       N
    'from '+
       N
    ' ( '+
        
    @selectString+
        
    @formString+
        
    @whereString+
        
    @groupString+
        
    @havingString+
       N
    ' ) as TB '+
       N
    'where '+
       N
    ' TB.RowNumber>='+cast(@firstRow as nvarchar(10))+
       N
    ' and TB.RowNumber<'+cast(@lastRow as nvarchar(10))+
       
    @orderString
    --over-------------------------------------------
    --
    执行SQL,返回影响行数;如有异常,则抛出,并赋值输出参数
    begin try
       
    exec (@sqlString);
       
    return @@rowcount;
    end try
    begin catch
       
    set @ErrorProcedure=Error_Procedure();
       
    set @ErrorNumber=error_number();
       
    set @ErrorMessage=error_message();
    end catch;end
    go-----------------------------------------------------------
    --
    简单的测试,查询AdventureWorks库的Person.Address表。
    --
    以addressid字段顺序分页、并按PostalCode ,StateProvinceID等字段排序。exec dbo.syspr_TablePaginationSearch 
    @SelectField='*'
    ,
    @FormTables='AdventureWorks.Person.Address'
    ,
    @whereField='addressid>100'
    ,
    @OverOrderField='addressid asc'
    ,
    @OrderField='PostalCode ,StateProvinceID'
    ,
    @Page=1
    ,
    @PageSize=10
    go
    --简单的测试,分组统计addressid字段,并分页显示结果集。exec dbo.syspr_TablePaginationSearch 
    @SelectField='count(addressid) as addressCount,city'
    ,
    @FormTables='AdventureWorks.Person.Address'
    ,
    @OverOrderField='count(addressid) desc'
    ,
    @GroupField='city'
    ,
    @Page=1
    ,
    @PageSize=10
    go
    --连接查询并分页
    exec dbo.syspr_TablePaginationSearch 
    @SelectField=N'
       addr.AddressLine1,
       addr.AddressLine2,
       addr.City, 
       sp.Name as ProvinceName,
       addr.PostalCode,
       addr.rowguid,
       addr.ModifiedDate
    '
    ,
    @FormTables=N'
       AdventureWorks.Person.Address as addr 
       inner join 
       AdventureWorks.Person.StateProvince as sp 
        on addr.StateProvinceID=sp.StateProvinceID
    '
    ,
    @OverOrderField='addressid asc'
    ,
    @Page=1
    ,
    @PageSize=10
    go
  • 相关阅读:
    [工作积累] shadow map问题汇总
    引擎设计跟踪(九.14.3.4) mile stone 2
    引擎设计跟踪(九.14.3.3) Deferred shading的一些小细节
    引擎设计跟踪(九.14.3.2) Deferred shading的后续实现和优化
    《口袋妖怪 太阳/月亮》正式公布 简体中文确认
    古墓丽影:崛起 PC版今日发售
    枪弹辩驳(弹丸论破)即将登陆PC
    引擎设计跟踪(九.14.3.1) deferred shading: Depthstencil as GBuffer depth
    引擎设计跟踪(九.14.3) deferred shading 准备
    引擎设计跟踪(九.14.2 final) Inverse Kinematics: CCD 在Blade中的实现
  • 原文地址:https://www.cnblogs.com/no7dw/p/1778463.html
Copyright © 2011-2022 走看看