zoukankan      html  css  js  c++  java
  • 获取指定页的记录

      1 USE [dbo]
      2 GO
      3 /****** Object:  StoredProcedure [dbo].[Common_GetPageRecords]    Script Date: 2019-11-14 09:12:42 ******/
      4 SET ANSI_NULLS ON
      5 GO
      6 SET QUOTED_IDENTIFIER ON
      7 GO
      8 
      9 /*
     10 ** 获取指定页的记录。
     11 **/
     12 ALTER PROCEDURE [dbo].[Common_GetPageRecords]
     13     @StartRow INT ,--起始行(从0开始)
     14     @MaxRows INT ,--每页的最大记录数
     15     @TableName NVARCHAR(2000) ,--表名
     16     @PrimaryKey NVARCHAR(50) ,--主键
     17     @GetFields NVARCHAR(1000) ,--要获取的列
     18     @SearchConditions NVARCHAR(2000) ,--搜索条件
     19     @SortExpression NVARCHAR(100) --排序表达式
     20 AS /*默认排序*/
     21     IF @SortExpression IS NULL
     22         OR @SortExpression = ''
     23         SET @SortExpression = REPLACE(REPLACE(@PrimaryKey, '[', ''), ']', '');
     24 
     25     DECLARE @CurrentPage INT = 1;
     26     DECLARE @SortTable VARCHAR(100);
     27     DECLARE @SortName VARCHAR(100);
     28     DECLARE @strSortColumn VARCHAR(200);
     29     DECLARE @operator CHAR(2);
     30     DECLARE @type VARCHAR(100);
     31     DECLARE @prec INT;
     32     DECLARE @sql NVARCHAR(1000);
     33     DECLARE @paramDefine NVARCHAR(100);
     34     DECLARE @TotalRecordCount INT;
     35     DECLARE @RowCount INT;
     36     DECLARE @Group VARCHAR(1000) = NULL;
     37 
     38     IF @MaxRows = 0 
     39     BEGIN 
     40        RETURN
     41     END 
     42  /******************** 数据表中总记录数 ***********************/
     43     IF @PrimaryKey IS NOT NULL
     44         AND @PrimaryKey <> ''
     45         BEGIN
     46             SET @PrimaryKey = REPLACE(REPLACE(@PrimaryKey, '[', ''), ']', '');            
     47             SET @sql = 'SELECT @RowCount = COUNT(1) FROM ' + @TableName
     48             + ' WHERE '+@PrimaryKey+'<=0';
     49             SET @paramDefine = '@RowCount INT OUTPUT';
     50             EXEC sp_executesql @sql, @paramDefine, @RowCount OUTPUT;
     51                 
     52             IF @RowCount>0
     53             BEGIN
     54                 IF @SearchConditions IS NOT NULL
     55                 AND @SearchConditions <> ''
     56                     BEGIN
     57                         SET @SearchConditions = @SearchConditions + ' AND '
     58                             + @PrimaryKey + '  !=-1 ';
     59                     END;
     60                 ELSE
     61                     BEGIN
     62                         SET @SearchConditions = @PrimaryKey + ' !=-1 ';
     63                     END;
     64             END
     65         END;
     66 
     67     SET @sql = 'SELECT @TotalRecordCount = COUNT(*) FROM ' + @TableName;
     68         
     69     IF @SearchConditions IS NOT NULL
     70         AND @SearchConditions <> ''
     71         BEGIN        
     72             SET @sql = @sql + ' WHERE ' + @SearchConditions;
     73         END;        
     74   
     75     SET @paramDefine = '@TotalRecordCount INT OUTPUT';
     76     EXEC sp_executesql @sql, @paramDefine, @TotalRecordCount OUTPUT;
     77  /*************************************************************/
     78 
     79     IF ( @StartRow = 0 )
     80         SET @CurrentPage = 1;
     81     IF @MaxRows = -1
     82         BEGIN
     83             SET @CurrentPage = 1;
     84             SET @MaxRows = 10000000;
     85         END; 
     86     ELSE
     87         SET @CurrentPage = @StartRow / @MaxRows + 1;
     88  
     89  /*设定排序语句.*/
     90     IF CHARINDEX(' DESC', @SortExpression) > 0
     91         BEGIN             
     92             SET @strSortColumn = REPLACE(@SortExpression, ' DESC', '');
     93             SET @operator = '<=';
     94         END;  
     95     ELSE
     96         BEGIN 
     97             IF CHARINDEX(' ASC', @SortExpression) > 0
     98             BEGIN
     99                 SET @strSortColumn = REPLACE(@SortExpression, ' ASC', '');
    100             END
    101             ELSE
    102             BEGIN
    103                 SET @strSortColumn = @SortExpression;
    104             END 
    105             SET @operator = '>=';
    106         END;
    107      
    108     IF CHARINDEX('.', @strSortColumn) > 0
    109         BEGIN
    110             SET @SortTable = SUBSTRING(@strSortColumn, 0,
    111                                        CHARINDEX('.', @strSortColumn));
    112             SET @SortName = SUBSTRING(@strSortColumn,
    113                                       CHARINDEX('.', @strSortColumn) + 1,
    114                                       LEN(@strSortColumn));        
    115         END;
    116     ELSE
    117         BEGIN         
    118             SET @strSortColumn = ISNULL(@strSortColumn, @PrimaryKey);
    119             SET @SortTable = @TableName;    
    120             SET @SortName = @strSortColumn;
    121         END;
    122     
    123     -- table的内容还是要去掉dbo.和[]括号。
    124     IF CHARINDEX('.', @SortTable) > 0 OR CHARINDEX('[', @SortTable) > 0
    125         BEGIN
    126             SET @SortTable =REPLACE(REPLACE(SUBSTRING(@SortTable, CHARINDEX('.', @SortTable) + 1,
    127                                        LEN(@SortTable)),'[',''),']','')
    128         END
    129 
    130     SELECT  @type = t.name ,
    131             @prec = c.prec
    132     FROM    sysobjects o
    133             JOIN syscolumns c ON o.id = c.id
    134             JOIN systypes t ON c.xusertype = t.xusertype
    135     WHERE   o.name = @SortTable
    136             AND c.name = @SortName;
    137 
    138     --SELECT @SortTable tab,@SortName sort, @type tty, @prec prc
    139     IF CHARINDEX('char', @type) > 0
    140     BEGIN
    141         IF @prec = -1  --如果排序的字段中有逗号存在时 @prec字段长度会为-1 就给它一个默认100长度
    142         BEGIN
    143             SET @type = @type + '(100)';
    144         END
    145         ELSE
    146         BEGIN
    147             SET @type = @type + '(' + CAST(@prec AS VARCHAR) + ')';
    148         END
    149     END
    150 
    151     DECLARE @strPageSize VARCHAR(50);
    152     DECLARE @strStartRow VARCHAR(50);
    153     DECLARE @strFilter VARCHAR(1000);
    154     DECLARE @strSimpleFilter VARCHAR(1000);
    155     DECLARE @strGroup VARCHAR(1000);
    156     
    157  /*设置分页参数.*/
    158     SET @strPageSize = CAST(@MaxRows AS VARCHAR(50));
    159     SET @strStartRow = CAST(( ( @CurrentPage - 1 ) * @MaxRows + 1 ) AS VARCHAR(50));
    160  /*筛选以及分组语句.*/
    161     IF @SearchConditions IS NOT NULL
    162         AND @SearchConditions != ''
    163         BEGIN
    164             SET @strFilter = ' WHERE ' + @SearchConditions + ' ';
    165             SET @strSimpleFilter = ' AND ' + @SearchConditions + ' ';
    166         END;
    167     ELSE
    168         BEGIN
    169             SET @strSimpleFilter = '';
    170             SET @strFilter = '';
    171         END;
    172     IF @Group IS NOT NULL
    173         AND @Group != ''
    174         SET @strGroup = ' GROUP BY ' + @Group + ' ';
    175     ELSE
    176         SET @strGroup = '';
    177 
    178     IF @type IS NULL
    179         SET @type = 'NVARCHAR(100)'; 
    180   --@SortColumn 为NULL 也要返回结果 20180911 Alma.Liu
    181  PRINT   '
    182     DECLARE @SortColumn ' + @type + '
    183     SET ROWCOUNT ' + @strStartRow + '
    184     SELECT @SortColumn=' + @strSortColumn + ' FROM ' + @TableName + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @SortExpression + '
    185     SET ROWCOUNT ' + @strPageSize + '
    186     IF @SortColumn IS NOT NULL
    187     SELECT ' + @GetFields + ' FROM ' + @TableName + ' WHERE ' + @strSortColumn + @operator + ' @SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' ORDER BY ' + @SortExpression + '
    188     ELSE
    189      SELECT ' + @GetFields + ' FROM ' + @TableName + ' WHERE 1=1 '  + @strSimpleFilter + ' ' + @strGroup + ' ORDER BY ' + @SortExpression +'
    190     '
    191  /*执行查询语句*/
    192     EXEC(
    193     '
    194     DECLARE @SortColumn ' + @type + '
    195     SET ROWCOUNT ' + @strStartRow + '
    196     SELECT @SortColumn=' + @strSortColumn + ' FROM ' + @TableName + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @SortExpression + '
    197     SET ROWCOUNT ' + @strPageSize + '
    198     IF @SortColumn IS NOT NULL
    199     SELECT ' + @GetFields + ' FROM ' + @TableName + ' WHERE ' + @strSortColumn + @operator +
    200      ' @SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' ORDER BY ' + @SortExpression + '
    201     ELSE
    202      SELECT ' + @GetFields + ' FROM ' + @TableName + ' WHERE 1=1 ' + @strSimpleFilter 
    203      + ' ' + @strGroup + ' ORDER BY ' + @SortExpression + '
    204     '
    205     );
    206 
    207     
    208     RETURN @TotalRecordCount;
  • 相关阅读:
    appium+python自动化测试之webview的处理。
    Mysql为什么要使用视图
    show status 查看各种状态
    MySQL show processlist
    Java爬虫系列(五)
    div p、div>p、div+p、div~p、div.a 、p,span的用法和区别
    Spring Boot 定时任务 -- @Scheduled
    设计模式
    12月15日总结
    成员变量和静态变量的区别
  • 原文地址:https://www.cnblogs.com/turnip/p/11974587.html
Copyright © 2011-2022 走看看