zoukankan      html  css  js  c++  java
  • 存储过程分页 (多条件拼接)



    alter proc sp_PagedByConditions ( @CountryCode nvarchar(
    20),--国家编号 @CId int,--城市的ID @PageIndex int =1,--当前要显示的页码 @PageSize int=3, --每页要显示的数据条数(页大小) @TotalPages int out --总页数,一个输出参数 ) as begin --定义的变量,一定要给初始值 declare @sqlWhere nvarchar(max)='' ,@sqlPaged nvarchar(max)='' if(@CountryCode!='') begin set @sqlWhere+=' and CountryCode='''+@CountryCode+'''' --'and CountryCode='''+CHN+'''' end if(@CId<>0) begin set @sqlWhere+=' and ID='+CAST(@CId as nvarchar(20)) end set @sqlPaged = 'select top('+cast(@PageSize as nvarchar(20))+') * from (select ROW_NUMBER() over(order by ID) as 行号,* from city where 1=1 '+@sqlWhere+' ) t where 行号>'+cast(((@PageIndex-1)*@PageSize) as nvarchar(20)) exec sp_executesql @sqlPaged --================取得要分页的总数据量,计算总页数================================================================ declare @sqlCount int=0 ,@sqlstr nvarchar(max)='' set @sqlstr='select @c= count(*) from city where 1=1'+@sqlWhere exec sp_executesql @sqlstr,N'@c int out',@sqlCount out set @TotalPages=CEILING(@sqlCount*1.0/@PageSize) end go declare @c int exec sp_PagedByConditions 'CHN',0,1,5,@c out select @c

    万能存储过程展示:

    /*    ==脚本参数==
    
        源服务器版本 : SQL Server 2017 (14.0.1000)
        源数据库引擎版本 : Microsoft SQL Server Enterprise Edition
        源数据库引擎类型 : 独立的 SQL Server
    
        目标服务器版本 : SQL Server 2017
        目标数据库引擎版本 : Microsoft SQL Server Standard Edition
        目标数据库引擎类型 : 独立的 SQL Server
    */
    
    USE [BAWEI]
    GO
    /****** Object:  StoredProcedure [dbo].[Proc_Pager]    Script Date: 2020/6/9 8:56:40 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER proc [dbo].[Proc_Pager]
        @TableName VARCHAR(50),            --表名
        @ReFieldsStr VARCHAR(200) = '*',   --字段名(全部字段为*)
        @OrderString VARCHAR(200),         --排序字段(必须)
        @WhereString VARCHAR(500) =N'',  --条件语句(不用加where)
        @PageSize int,                     --每页多少条记录
        @PageIndex INT = 1 ,               --指定当前为第几页
        @TotalRecord INT OUTPUT            --返回总记录数
    AS
    BEGIN
         --处理开始点和结束点
        DECLARE @StartRecord INT;
        DECLARE @EndRecord INT; 
        DECLARE @TotalCountSql NVARCHAR(500); 
        DECLARE @SqlString NVARCHAR(2000);    
        SET @StartRecord = (@PageIndex-1)*@PageSize + 1--起始记录
        SET @EndRecord = @StartRecord + @PageSize - 1 --结尾记录
        SET @TotalCountSql= N'select @TotalRecord = count(*) from ' + @TableName;--总记录数语句
        SET @SqlString = N'(select row_number() over (order by '+ @OrderString +') as rowId,'+@ReFieldsStr+' from '+ @TableName;--查询语句
        --
        IF (@WhereString! = '' or @WhereString!=null)
            BEGIN
                SET @TotalCountSql=@TotalCountSql + '  where '+ @WhereString;
                SET @SqlString =@SqlString+ '  where '+ @WhereString;            
            END
        --第一次执行得到
        EXEC sp_executesql @totalCountSql,N'@TotalRecord int out',@TotalRecord OUTPUT;--返回总记录数
        ----执行主语句
        SET @SqlString ='select * from ' + @SqlString + ') as t where rowId between ' + ltrim(str(@StartRecord)) + ' and ' +  ltrim(str(@EndRecord));
        Exec(@SqlString)    
    END
    多表联查调用
    exec Proc_Pager ' student a inner join b on a.s_id=b.t_id',''
  • 相关阅读:
    排座椅
    关于math.h的问题
    客户调查
    排队打水
    删数游戏
    小数背包
    零件分组
    桐桐的组合
    桐桐的数学游戏
    桐桐的全排列
  • 原文地址:https://www.cnblogs.com/cf425/p/13448988.html
Copyright © 2011-2022 走看看