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)