一个同事提供的通用存储过程(标记学习)

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

个人感觉还是有可以改进的地方 ,但是因为领导要的急 ,所以就拿过来用了。可用性还是很高的 。

posted on 2013-03-22 14:25  梁子se7en  阅读(265)  评论(0)    收藏  举报