01 | set ANSI_NULLS ON |
02 | set QUOTED_IDENTIFIER ON |
03 | go |
04 | |
05 | /* |
06 | 功能描述: 通用分页显示查询 |
07 | 如果有自增标识字段,在@strGetFields中不要加入此字段信息, |
08 | 如果非要加入的话,要 (fldName + 0) AS fldName 这样处理; |
09 | 输入参数: |
10 | @tblName: 表名 |
11 | @strGetFields: 需要返回的列 '*' :返回所以列信息 |
12 | @PageSize: 页尺寸 |
13 | @PageIndex: 页码 |
14 | @doCount: 返回记录总数, 非 0 值则返回 |
15 | @strOrderBy: 排序字段信息,(注意: 不要加 ORDER BY ) |
16 | 格式: Field1 DESC , Field2 ASC |
17 | @strWhere: 查询条件,(注意: 不要加 WHERE ) |
18 | 输出参数: @RecordCount: 记录总数 |
19 | 作 者: Nestcn |
20 | 创建时间: 2010-03-09 |
21 | 更改纪录: |
22 | */ |
23 | ALTER PROCEDURE [dbo].[MyPagination] |
24 | ( |
25 | @tblName varchar (255), |
26 | @strGetFields varchar (1000) = '*' , |
27 | @PageSize int = 10, |
28 | @PageIndex int = 1, |
29 | @doCount bit = 0, |
30 | @strOrderBy varchar (500) = '' , |
31 | @strWhere varchar (1500) = '' , |
32 | @RecordCount int output |
33 | ) |
34 | AS |
35 | -- 主语句 |
36 | DECLARE @strSQL varchar (5000) SET @strSQL = '' |
37 | -- 排序变量 |
38 | DECLARE @strOrder varchar (400) SET @strOrder = '' |
39 | |
40 | SET @RecordCount = 0 |
41 | --如果@doCount传递过来的不是0,就执行总数统计 |
42 | IF (@doCount != 0) |
43 | BEGIN |
44 | DECLARE @sWhere varchar (2000) |
45 | |
46 | SET @sWhere = '' |
47 | IF (@strWhere != '' ) |
48 | SET @sWhere = ' WHERE ' + @strWhere |
49 | |
50 | SET @strSQL = 'if exists (select * from dbo.sysobjects where id = object_id(' '[dbo].[tmpTable]' ') and OBJECTPROPERTY(id, ' 'IsUserTable' ') = 1) ' |
51 | SET @strSQL = @strSQL + ' UPDATE tmpTable SET Total = (SELECT COUNT(*) FROM [' + @tblName + '] ' + @sWhere + ') ' |
52 | SET @strSQL = @strSQL + ' ELSE SELECT COUNT(*) AS Total INTO tmpTable FROM [' + @tblName + '] ' + @sWhere |
53 | |
54 | EXEC (@strSQL) |
55 | |
56 | SELECT @RecordCount=Total FROM tmpTable |
57 | |
58 | --删除总数统计临时表 |
59 | EXEC ( 'DROP TABLE tmpTable' ) |
60 | END |
61 | |
62 | PRINT @RecordCount |
63 | |
64 | --排序字段信息 |
65 | IF (@strOrderBy != '' ) |
66 | SET @strOrder = ' ORDER BY ' + @strOrderBy |
67 | --如果是第一页就执行以上代码,这样会加快执行速度 |
68 | IF (@PageIndex = 1) |
69 | BEGIN |
70 | IF (@strWhere != '' ) |
71 | SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM [' + @tblName + '] WHERE ' + @strWhere + @strOrder |
72 | ELSE |
73 | SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM [' + @tblName + '] ' + @strOrder |
74 | END |
75 | ELSE |
76 | BEGIN |
77 | --为搜索表建立自动编号 保存到临时表中 |
78 | SET @strSQL = 'SELECT TOP ' + str(@PageIndex*@PageSize) + ' IDENTITY(int,1,1) AS IID, ' + @strGetFields + ' INTO #tmpTable FROM [' + @tblName + ']' |
79 | IF (@strWhere != '' ) |
80 | SET @strSQL = @strSQL + ' WHERE ' + @strWhere + @strOrder |
81 | ELSE |
82 | SET @strSQL = @strSQL + @strOrder |
83 | |
84 | --以下代码赋予了@strSQL以真正执行的SQL代码 |
85 | SET @strSQL = @strSQL + ' SELECT ' + @strGetFields + ' FROM #tmpTable WHERE IID > ' + str((@PageIndex-1)*@PageSize) + ' DROP TABLE #tmpTable' |
86 | END |
87 | |
88 | PRINT @strSQL |
89 | |
90 | --执行分页查询 |
91 | EXEC (@strSQL) |