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)
|