zoukankan      html  css  js  c++  java
  • SQL分页存储过程

    SQL中的分页存储过程,你懂的...

    /******************************************************************************
    **  功能:SQL 分页查询
    **  作者:Danny,Li (xing.dong.li@163.com)
    **  日期:2011-11-09
    *******************************************************************************
    **  返回值列表
    ****************************
    **  返回值        涵义
    **  -------        -----------------------------------------------------------
    **
    *******************************************************************************
    **  修订日志
    ****************************
    **  日期        作者        修订备注
    **  ----------    --------    -----------------------------------------------
    **    
    *******************************************************************************/
    CREATE PROCEDURE [dbo].[CSP_GetRecordsByPage]
        @tblName varchar(2000),            --表名
        @strGetFields varchar(2000)='*',    --需要返回的列
        @fldName varchar(255)='',            --排序的字段名
        @PageSize int =10,                --页尺寸
        @PageIndex int =1,                -- 页码
        @doCount bit =0,                    --返回记录总数,非0值则返回
        @OrderType bit =0,                --设置排序类型,非0值则降序
        @strWhere nvarchar(1500)=''        --查询条件(注意:不要加where)
    AS
    BEGIN
        
        DECLARE @strSQL nvarchar(4000)        --主语句
        DECLARE @strTmp varchar(110)            --临时变量
        DECLARE @strOrder varchar(400)        --排序类型
        DECLARE @noDotFldName varchar(255)    --如果是多表联合查询则去掉点前面的字符
    
        SET @noDotFldName = SUBSTRING(@fldName,CHARINDEX('.',@fldName)+1,len(@fldName))
    
        --以下代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
        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
        ELSE
        BEGIN
            --如果@OrderType不是0,就执行降序
            IF @OrderType != 0 
            BEGIN
                SET @strTmp = '<(SELECT MIN'
                SET @strOrder = ' ORDER BY ' + @fldName + ' DESC'
            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
                ELSE
                    SET @strSQL = 'SELECT TOP ' + STR(@PageSize) +' ' + @strGetFields + ' FROM '+ @tblName
            END   
            ELSE   
            BEGIN   
                --以下代码赋予了@strSQL以真正执行的SQL代码   
                SET @strSQL = 'SELECT TOP ' + STR(@PageSize) + ' ' + @strGetFields + ' FROM ' + @tblName 
                    + ' WHERE ' + @fldName + ' ' + @strTmp + '(' + @noDotFldName + ') FROM (SELECT TOP ' 
                    + STR((@PageIndex-1)*@PageSize) + ' ' + @fldName + ' FROM ' + @tblName 
                    + ' ' + @strOrder + ') AS tblTmp)'
                
                IF @strWhere != ''   
                    SET @strSQL = 'SELECT TOP ' + STR(@PageSize) + ' ' + @strGetFields+ ' FROM ' + @tblName 
                        + ' WHERE ' + @fldName + ' ' + @strTmp + '(' + @noDotFldName   
                        + ') FROM (SELECT TOP ' + STR((@PageIndex-1)*@PageSize) + ' ' + @fldName 
                        + ' FROM ' + @tblName + ' WHERE ' + @strWhere + ' ' + @strOrder 
                        + ') AS TBLTMP) AND ' + @strWhere
            END
                
            IF @strOrder IS NOT NULL AND @strOrder!='' 
                SET @strSQL = @strSQL+' '+@strOrder
        
        END 
        
        PRINT @strSQL
        
        EXEC(@strSQL)
        
    END
  • 相关阅读:
    海康威视复赛题
    [转] A*寻路算法C++简单实现
    [转]程序进行性能分析工具gprof使用入门
    [转]KMP 算法
    boolalpha的用法和作用
    python与数据科学有多少“暧昧情事”?14个Q&A告诉你
    Python来袭,教你用Neo4j构建“复联4”人物关系图谱!
    深入理解BERT Transformer ,不仅仅是注意力机制
    Python开发者年度调研,结果出乎意料!
    R和Python,对抗or融合?
  • 原文地址:https://www.cnblogs.com/dannyli/p/2662839.html
Copyright © 2011-2022 走看看