View Code
1 /************************************************************ 2 * Code by se7en 3 * Time: 2013/3/22 14:23:29 4 ************************************************************/ 5 6 USE [HLT_HIEP_V2] 7 GO 8 /****** Object: StoredProcedure [dbo].[Paging] Script Date: 03/22/2013 14:23:17 ******/ 9 SET ANSI_NULLS ON 10 GO 11 12 SET QUOTED_IDENTIFIER ON 13 GO 14 15 ALTER PROCEDURE [dbo].[Paging] --创建分页数据集 Table[0]:记录总数和总页数, Table[1]:当前页 16 @pagesize INT, -- 指定分页大小 17 @pagenum INT, -- 指定当前页 18 @key VARCHAR(50), -- 查询主键 19 @fields VARCHAR(1024), --指定除了主键和外其它需要输出的字段 20 @joins VARCHAR(2048), --联合数据源 21 @filter VARCHAR(4096), --查询条件 22 @order VARCHAR(1000) --排序规则 23 AS 24 DECLARE @sql1 VARCHAR(4096) 25 DECLARE @sql2 VARCHAR(4096) 26 DECLARE @sql3 VARCHAR(4096) 27 SET @sql1 = 'select identity(int, 1, 1) as seqId, convert(varchar(200), ' + 28 @key + ') as pkey into #tmp from ' + @joins + ' where ' + @filter + 29 ' order by ' + @order 30 31 SET @sql2 = 'select @@rowcount as 记录总数, ceiling(@@rowcount*1.0 / ' + 32 CONVERT(VARCHAR(10), @pagesize) + ') as 总页数' 33 34 SET @sql3 = 'select ' + @key + ' as 主键, #tmp.seqid as 序号, ' + @fields + 35 ' from ' + @joins + ' inner join #tmp on ' + @key + ' = #tmp.pkey ' + 36 ' where ' + @filter + ' and #tmp.seqid between ' + CONVERT(VARCHAR(10), (@pagenum -1) * @pagesize + 1) 37 + ' and ' + CONVERT(VARCHAR(10), @pagenum * @pagesize) + 38 ' order by #tmp.seqid' 39 40 EXEC (@sql1 + ';' + @sql2 + ';' + @sql3) 41 PRINT @sql1
个人感觉还是有可以改进的地方 ,但是因为领导要的急 ,所以就拿过来用了。可用性还是很高的 。