zoukankan      html  css  js  c++  java
  • 通用数据库存储过程代码高效分页存储过程

    -- 获取指定页的数据 
    Create PROCEDURE pagination
        
    @tblName varchar(255), -- 表名 
        @strGetFields varchar(1000= '*'-- 需要返回的列 
        @fldName varchar(255)=''-- 排序的字段名 
        @PageSize int = 10-- 页尺寸 
        @PageIndex int = 1-- 页码 
        @doCount bit = 0-- 返回记录总数, 非 0 值则返回 
        @OrderType bit = 0-- 设置排序类型, 非 0 值则降序 
        @strWhere varchar(1500= '' -- 查询条件 (注意: 不要加 where) 
    AS 

    declare @strSQL varchar(5000-- 主语句 
    declare @strTmp varchar(110-- 临时变量 
    declare @strOrder varchar(400-- 排序类型 
    if @doCount != 0 
        
    begin 
            
    if @strWhere !='' 
                
    set @strSQL = "select count(*as Total from [" + @tblName + "] where "+@strWhere 
            
    else 
                
    set @strSQL = "select count(*as Total from [" + @tblName + "]
        
    end 
        
    --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况 

    else 
        
    begin 
            
    if @OrderType != 0 
                
    begin 
                    
    set @strTmp = "<(select min
                    
    set @strOrder = " order by [" + @fldName +"] desc
                    
    --如果@OrderType不是0,就执行降序,这句很重要! 
                end 
            
            
    else 
                
    begin 
                    
    set @strTmp = ">(select max
                    
    set @strOrder = " order by [" + @fldName +"] asc
                
    end 
                
    if @PageIndex = 1 
                    
    begin 
                        
    if @strWhere != '' 
                            
    set @strSQL = "select top " + str(@PageSize+" "+@strGetFields+ " from [" + @tblName + "] where " + @strWhere + " " + @strOrder 
                        
    else 
                            
    set @strSQL = "select top " + str(@PageSize+" "+@strGetFields+ " from ["+ @tblName + "] "+ @strOrder 
                            
    --如果是第一页就执行以上代码,这样会加快执行速度 
                    end 
                
    else 
                    
    begin 
                        
    --以下代码赋予了@strSQL以真正执行的SQL代码 
                        set @strSQL = "select top " + str(@PageSize+" "+@strGetFields+ " from [
                            + @tblName + "
    ] where [" + @fldName + "]+ @strTmp + "(["+ @fldName + "]from (select top " + str((@PageIndex-1)*@PageSize+ " ["+ @fldName + "] from [" + @tblName + "]+ @strOrder + ") as tblTmp)"+ @strOrder 
                            
    if @strWhere != '' 
                        
    set @strSQL = "select top " + str(@PageSize+" "+@strGetFields+ " from [
                            + @tblName + "
    ] where [" + @fldName + "]+ @strTmp + "([
                            + @fldName + "
    ]from (select top " + str((@PageIndex-1)*@PageSize+ " [
                            + @fldName + "
    ] from [" + @tblName + "] where " + @strWhere + " " 
                            
    + @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder 
        
    end 
    end 


    exec (@strSQL)
    GO
    Dynamic Sql
    Code

  • 相关阅读:
    Fix Installing .NET Framework 3.5 failed Error Code 0x800F0954 on Windows 10
    RHEL8安装五笔输入法
    Enable EPEL and Local Repository on RHEL8
    Why is Yum Replaced by DNF?
    检查Linux服务器是否被攻击的常用命令及方法
    IDEA 主题
    IDEA 如何显示一个类中所有的方法
    Appium 安装以及安装过程中遇到的问题
    Maven 如何发布 jar 包到 Nexus 私库
    java泛型的基本使用
  • 原文地址:https://www.cnblogs.com/snowball/p/1039689.html
Copyright © 2011-2022 走看看