• sqlserver 通用分页存储过程(转)


      1 USE [AAA_TYDC]
      2 GO
      3 /****** Object:  StoredProcedure [dbo].[proc_DataPagination]    Script Date: 11/20/2014 11:04:47 ******/
      4 SET ANSI_NULLS ON
      5 GO
      6 SET QUOTED_IDENTIFIER ON
      7 GO
      8  
      9 /*********************************************************  
     10 * 作    用:数据分页
     11 * 作    者:evafly920
     12 * 作者博客:http://blog.csdn.net/evafly920/article/details/614813
     13 * 创建日期:2003-11-23
     14 * 修改日期:2014-11-23 
     15 * 使用说明:
     16     --调用例子:
     17     --1.单表/单排序
     18     EXEC proc_DataPagination @TableNames='bigtable',@PrimaryKey='d_id',@Fields='d_id,d_title,d_content,d_time',@PageSize=20,@CurrentPage=1,@Filter ='',@Group='',@Order='d_id desc'
     19     --2.单表/多排序
     20     EXEC proc_DataPagination 'bigtable','d_id','*',20,0,'','','d_time asc,d_id desc'
     21     --3.多表/单排序
     22     EXEC proc_DataPagination 'bigtable left join bigtable_author on bigtable.d_id=bigtable_author.BigTable_id', 'bigtable.d_id', 'bigtable.d_id,bigtable.d_title,bigtable.d_content,bigtable.d_time,bigtable_author.d_author', 20, 0, '', '', 'bigtable.d_id asc'
     23     --4.多表/多排序
     24     EXEC proc_DataPagination 'bigtable left join bigtable_author on bigtable.d_id=bigtable_author.BigTable_id', 'bigtable.d_id', 'bigtable.d_id,bigtable.d_title,bigtable.d_content,bigtable.d_time,bigtable_author.d_author', 20, 0, '', '', 'bigtable.d_time asc,bigtable.d_id desc'
     25 
     26 *********************************************************/  
     27  ALTER PROCEDURE [dbo].[proc_DataPagination]  
     28 @TableNames VARCHAR(200),    --表名,可以是多个表,但不能用别名
     29 @PrimaryKey VARCHAR(100),    --主键,可以为空,但@Order为空时该值不能为空
     30 @Fields    VARCHAR(200),        --要取出的字段,可以是多个表的字段,可以为空,为空表示select *
     31 @PageSize INT,            --每页记录数
     32 @CurrentPage INT,        --当前页,0表示第1页
     33 @Filter VARCHAR(200) = '',    --条件,可以为空,不用填 where
     34 @Group VARCHAR(200) = '',    --分组依据,可以为空,不用填 group by
     35 @Order VARCHAR(200) = ''    --排序,可以为空,为空默认按主键升序排列,不用填 order by
     36 AS
     37 BEGIN
     38     DECLARE @SortColumn VARCHAR(200)
     39     DECLARE @Operator CHAR(2)
     40     DECLARE @SortTable VARCHAR(200)
     41     DECLARE @SortName VARCHAR(200)
     42     IF @Fields = ''
     43         SET @Fields = '*'
     44     IF @Filter = ''
     45         SET @Filter = 'WHERE 1=1'
     46     ELSE
     47         SET @Filter = 'WHERE ' +  @Filter
     48     IF @Group <>''
     49         SET @Group = 'GROUP BY ' + @Group
     50 
     51     IF @Order <> ''
     52     BEGIN
     53         DECLARE @pos1 INT, @pos2 INT
     54         SET @Order = REPLACE(REPLACE(@Order, ' asc', ' ASC'), ' desc', ' DESC')
     55         IF CHARINDEX(' DESC', @Order) > 0
     56             IF CHARINDEX(' ASC', @Order) > 0
     57             BEGIN
     58                 IF CHARINDEX(' DESC', @Order) < CHARINDEX(' ASC', @Order)
     59                     SET @Operator = '<='
     60                 ELSE
     61                     SET @Operator = '>='
     62             END
     63             ELSE
     64                 SET @Operator = '<='
     65         ELSE
     66             SET @Operator = '>='
     67         SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order, ' ASC', ''), ' DESC', ''), ' ', '')
     68         SET @pos1 = CHARINDEX(',', @SortColumn)
     69         IF @pos1 > 0
     70             SET @SortColumn = SUBSTRING(@SortColumn, 1, @pos1-1)
     71         SET @pos2 = CHARINDEX('.', @SortColumn)
     72         IF @pos2 > 0
     73         BEGIN
     74             SET @SortTable = SUBSTRING(@SortColumn, 1, @pos2-1)
     75             IF @pos1 > 0 
     76                 SET @SortName = SUBSTRING(@SortColumn, @pos2+1, @pos1-@pos2-1)
     77             ELSE
     78                 SET @SortName = SUBSTRING(@SortColumn, @pos2+1, LEN(@SortColumn)-@pos2)
     79         END
     80         ELSE
     81         BEGIN
     82             SET @SortTable = @TableNames
     83             SET @SortName = @SortColumn
     84         END
     85     END
     86     ELSE
     87     BEGIN
     88         SET @SortColumn = @PrimaryKey
     89         SET @SortTable = @TableNames
     90         SET @SortName = @SortColumn
     91         SET @Order = @SortColumn
     92         SET @Operator = '>='
     93     END
     94 
     95     DECLARE @type varchar(50)
     96     DECLARE @prec int
     97     SELECT @type=t.name, @prec=c.prec
     98     FROM sysobjects o 
     99     JOIN syscolumns c on o.id=c.id
    100     JOIN systypes t on c.xusertype=t.xusertype
    101     WHERE o.name = @SortTable AND c.name = @SortName
    102     IF CHARINDEX('char', @type) > 0
    103     SET @type = @type + '(' + CAST(@prec AS varchar) + ')'
    104 
    105     DECLARE @TopRows INT
    106     SET @TopRows = @PageSize * @CurrentPage + 1
    107     print @TopRows
    108     print @Operator
    109     EXEC('
    110         DECLARE @SortColumnBegin ' + @type + '
    111         SET ROWCOUNT ' + @TopRows + '
    112         SELECT @SortColumnBegin=' + @SortColumn + ' FROM  ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + '
    113         SET ROWCOUNT ' + @PageSize + '
    114         SELECT ' + @Fields + ' FROM  ' + @TableNames + ' ' + @Filter  + ' AND ' + @SortColumn + '' + @Operator + '@SortColumnBegin ' + @Group + ' ORDER BY ' + @Order + '    
    115     ')    
    116 END
    117 
    118 GO
  • 相关阅读:
    英黑客侵入Zynga系统窃得价值1200万美元筹码 狼人:
    瑞星发布2010企业安全报告 九成国内企业曾被入侵 狼人:
    赛门铁克大中国区总裁吴锡源:云安全是一项系统工程 狼人:
    频遭攻击 索尼无奈关闭多国网站 狼人:
    Pwn2Own黑客大赛首日:Safari、IE8被攻破 狼人:
    疯子的研究:瘫痪整个互联网绝非天方夜谭 狼人:
    Google收购安全分析软件厂商Zynamics 狼人:
    RSA大会:黑客正在觊觎个人用户而非网络 狼人:
    从索尼泄密看云计算安全 狼人:
    RSA公布被攻击内幕:钓鱼邮件惹祸 狼人:
  • 原文地址:https://www.cnblogs.com/ezplusy/p/4110191.html
Copyright © 2020-2023  润新知