首页 > 代码库 > sqlserver 通用分页存储过程(转)
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.id100 JOIN systypes t on c.xusertype=t.xusertype101 WHERE o.name = @SortTable AND c.name = @SortName102 IF CHARINDEX(‘char‘, @type) > 0103 SET @type = @type + ‘(‘ + CAST(@prec AS varchar) + ‘)‘104 105 DECLARE @TopRows INT106 SET @TopRows = @PageSize * @CurrentPage + 1107 print @TopRows108 print @Operator109 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 END117 118 GO
sqlserver 通用分页存储过程(转)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。