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
  • 相关阅读:
    java 流重定向
    Linux下用鼠标滚轮
    AutoPager的简单实现
    App Store Review Guidelines ——苹果大慈大悲啊
    利用CSS3特性巧妙实现漂亮的DIV箭头
    Have you read it before?
    Windows Phone 7上的GPS应用编程详解。
    说一下Path类
    远程截取屏幕内容
    争论VB.NET与C#哪个好?——智商低下的举动
  • 原文地址:https://www.cnblogs.com/dannyli/p/2662839.html
Copyright © 2011-2022 走看看