• SQL分页存储过程(不支持多表联合查询,不支持多字段排序)


    CREATE PROCEDURE [dbo].[Pro_GetPageOfRecords]
    @PageSize   INT=20,            --分页大小
    @CurrentPage INT,              --第几页
    @Clumns  VARCHAR(1000)='*',    --需要得到的字段
    @TableName VARCHAR(100),       --需要查询的表
    @Condition VARCHAR(1000)='',   --查询条件,不用加Where关键字
    @AscColumn VARCHAR(100)='',    --排序的字段名(即order by column asc/desc)
    @BitOrderType BIT=0,           --排序类型(0为升序,1为降序)
    @PkColumn VARCHAR(50)='',      --主键名称,不可为空  
    @TotalCount INT OUTPUT ,       --记返回总记录          
    @TotalPageCount INT OUTPUT     --返回总页数         
    AS
    BEGIN
    	DECLARE @strSql VARCHAR(5000)           --分页语句 
    	DECLARE @strOrderType VARCHAR(1000)     --排序类型语句 
        DECLARE @SqlCount NVARCHAR(4000)   	    --记录数语句
        DECLARE @new_where VARCHAR(1000)        --查询条件
        ----Where条件处理-------------   	
         IF @Condition!=''
            BEGIN          
               SET @new_where = ' Where ' + @Condition                   
            END 
          ELSE
            BEGIN
                SET @new_where = ' Where 1=1'  
            END      
         ----------总记录数查询---------------
         SET @SqlCount = 'Select @TotalCount=COUNT(*),@TotalPageCount=CEILING((COUNT(*)+0.0)/'          
        +STR(@PageSize)+') FROM (Select * FROM ' + @TableName + @new_where+') AS T'                 
            BEGIN          
                EXEC SP_EXECUTESQL @SqlCount,N'@TotalCount INT OUTPUT,@TotalPageCount INT OUTPUT',       
                @TotalCount OUTPUT,@TotalPageCount OUTPUT          
            END    
        --------------排序处理------------      
    	 IF	@BitOrderType=1   --降序
    	 	BEGIN
    	 	    IF	@AscColumn!=''   
    	 		SET @strOrderType=' ORDER BY '+@AscColumn+' DESC'
    	 	    ELSE	
    	 	    SET @strOrderType=' ORDER BY '+@PkColumn+' DESC'
    	    END
    	 ELSE  
    	   BEGIN
    	   IF	@AscColumn!=''
    	     SET @strOrderType=' ORDER BY '+@AscColumn+' ASC'
    	    ELSE	
    	     SET @strOrderType=' ORDER BY '+@PkColumn+' ASC'
    	   END   
    -----------------分页处理--------------------
    	IF @CurrentPage=1     --第一页
    	   BEGIN
    		  SET @strSql='SELECT TOP '+STR(@PageSize)+''+@Clumns+' FROM'+ @TableName + @new_where+@strOrderType
           END	 
         ELSE               --其他页
           BEGIN
    		  set @strsql = 'SELECT TOP '+STR(@PageSize)+' '+@Clumns+' FROM '+ @TableName + @new_where+' AND ('+@PkColumn+' NOT IN (SELECT TOP '+STR((@PageSize-1)*@PageSize)+' '+@PkColumn+' FROM '+@TableName+''+@Condition+@strOrderType+'))'+@strOrderType
           END
           
         EXEC (@strSql)
    END
    
  • 相关阅读:
    Java并发编程:线程池的使用
    AlarmManager与PendingIntent
    ConnectivityManager与检查网络连接的使用
    IntentService的使用
    Service(Local Service)简介
    Looper、Hander、HandlerThread
    XML_PULL解析
    android AsyncTask 的使用(转载)
    android 连接网络的简单实例
    xml drawable
  • 原文地址:https://www.cnblogs.com/jlcoder/p/3303702.html
Copyright © 2020-2023  润新知