各位用户为了找寻关于SqlServer 2000、2005分页存储过程整理的资料费劲了很多周折。这里教程网为您整理了关于SqlServer 2000、2005分页存储过程整理的相关资料,仅供查阅,以下为您介绍关于SqlServer 2000、2005分页存储过程整理的详细内容
sql server 2005的分页存储过程分3个版本,一个是没有优化过的,一个是优化过的,最后一个支持join的,sql server 2000的分页存储过程,也可以运行在sql server 2005上,但是性能没有sql server 2005的版本好。
在最后 我还附带了一个二分法的分页存储过程,也很好用的说哈~~
1.SqlServer 2005:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
CREATE
proc [dbo].[up_Page2005]
@TableName
varchar
(50),
--表名
@Fields
varchar
(5000) =
'*'
,
--字段名(全部字段为*)
@OrderField
varchar
(5000),
--排序字段(必须!支持多字段)
@sqlWhere
varchar
(5000) =
Null
,
--条件语句(不用加where)
@pageSize
int
,
--每页多少条记录
@pageIndex
int
= 1 ,
--指定当前为第几页
@TotalPage
int
output
--返回总页数
as
begin
Begin
Tran
--开始事务
Declare
@sql nvarchar(4000);
Declare
@totalRecord
int
;
--计算总记录数
if (@SqlWhere=
''
or
@sqlWhere=
NULL
)
set
@sql =
'select @totalRecord = count(*) from '
+ @TableName
else
set
@sql =
'select @totalRecord = count(*) from '
+ @TableName +
' with(nolock) where '
+ @sqlWhere
EXEC
sp_executesql @sql,N
'@totalRecord int OUTPUT'
,@totalRecord
OUTPUT
--计算总记录数
--计算总页数
select
@TotalPage=CEILING((@totalRecord+0.0)/@PageSize)
if (@SqlWhere=
''
or
@sqlWhere=
NULL
)
set
@sql =
'Select * FROM (select ROW_NUMBER() Over(order by '
+ @OrderField +
') as rowId,'
+ @Fields +
' from '
+ @TableName
else
set
@sql =
'Select * FROM (select ROW_NUMBER() Over(order by '
+ @OrderField +
') as rowId,'
+ @Fields +
' from '
+ @TableName +
' with(nolock) where '
+ @SqlWhere
--处理页数超出范围情况
if @PageIndex<=0
Set
@pageIndex = 1
if @pageIndex>@TotalPage
Set
@pageIndex = @TotalPage
--处理开始点和结束点
Declare
@StartRecord
int
Declare
@EndRecord
int
set
@StartRecord = (@pageIndex-1)*@PageSize + 1
set
@EndRecord = @StartRecord + @pageSize - 1
--继续合成sql语句
set
@Sql = @Sql +
') as t where rowId between '
+
Convert
(
varchar
(50),@StartRecord) +
' and '
+
Convert
(
varchar
(50),@EndRecord)
print @sql
Exec
(@Sql)
---------------------------------------------------
If @@Error <> 0
Begin
RollBack
Tran
Return
-1
End
Else
Begin
Commit
Tran
Return
@totalRecord
---返回记录总数
End
end
2.Sql Server 2005:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77/****** 对象: StoredProcedure [dbo].[up_Page2005V2] 脚本日期: 05/21/2008 11:27:15 ******/
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE
PROCEDURE
[dbo].[up_Page2005V2]
@TableName
varchar
(50),
--表名
@Fields
varchar
(5000) =
'*'
,
--字段名(全部字段为*)
@OrderField
varchar
(5000),
--排序字段(必须!支持多字段)
@sqlWhere
varchar
(5000) =
Null
,
--条件语句(不用加where)
@pageSize
int
,
--每页多少条记录
@pageIndex
int
= 1 ,
--指定当前为第几页
@totalRecord
int
= 0,
@TotalPage
int
output
--返回总页数
AS
BEGIN
Begin
Tran
--开始事务
Declare
@sql nvarchar(4000);
if @totalRecord<=0
begin
--计算总记录数
if (@SqlWhere=
''
or
@sqlWhere=
NULL
)
set
@sql =
'select @totalRecord = count(*) from '
+ @TableName
else
set
@sql =
'select @totalRecord = count(*) from '
+ @TableName +
' with(nolock) where '
+ @sqlWhere
EXEC
sp_executesql @sql,N
'@totalRecord int OUTPUT'
,@totalRecord
OUTPUT
--计算总记录数
end
--计算总页数
select
@TotalPage=CEILING((@totalRecord+0.0)/@PageSize)
if (@SqlWhere=
''
or
@sqlWhere=
NULL
)
set
@sql =
'Select * FROM (select ROW_NUMBER() Over(order by '
+ @OrderField +
') as rowId,'
+ @Fields +
' from '
+ @TableName
else
set
@sql =
'Select * FROM (select ROW_NUMBER() Over(order by '
+ @OrderField +
') as rowId,'
+ @Fields +
' from '
+ @TableName +
' with(nolock) where '
+ @SqlWhere
--处理页数超出范围情况
if @PageIndex<=0
Set
@pageIndex = 1
if @pageIndex>@TotalPage
Set
@pageIndex = @TotalPage
--处理开始点和结束点
Declare
@StartRecord
int
Declare
@EndRecord
int
set
@StartRecord = (@pageIndex-1)*@PageSize + 1
set
@EndRecord = @StartRecord + @pageSize - 1
--继续合成sql语句
set
@Sql = @Sql +
') as t where rowId between '
+
Convert
(
varchar
(50),@StartRecord) +
' and '
+
Convert
(
varchar
(50),@EndRecord)
print @sql
Exec
(@Sql)
---------------------------------------------------
If @@Error <> 0
Begin
RollBack
Tran
Return
-1
End
Else
Begin
Commit
Tran
Return
@totalRecord
---返回记录总数
End
END
GO
3.Sql Server 2005:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71/****** 对象: StoredProcedure [dbo].[up_Page2005V2_Join] 脚本日期: 05/21/2008 11:27:30 ******/
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
CREATE
PROCEDURE
[dbo].[up_Page2005V2_Join]
@TableName
varchar
(150),
--表名
@Fields
varchar
(5000) =
'*'
,
--字段名(全部字段为*)
@OrderField
varchar
(5000),
--排序字段(必须!支持多字段)
@sqlWhere
varchar
(5000) =
Null
,
--条件语句(不用加where)
@pageSize
int
,
--每页多少条记录
@pageIndex
int
= 1 ,
--指定当前为第几页
@totalRecord
int
= 0,
@TotalPage
int
output
--返回总页数
AS
BEGIN
Begin
Tran
--开始事务
Declare
@sql nvarchar(4000);
if @totalRecord<=0
begin
--计算总记录数
if (@SqlWhere=
''
or
@sqlWhere=
NULL
)
set
@sql =
'select @totalRecord = count(*) from '
+ @TableName
else
set
@sql =
'select @totalRecord = count(*) from '
+ @TableName +
' where '
+ @sqlWhere
EXEC
sp_executesql @sql,N
'@totalRecord int OUTPUT'
,@totalRecord
OUTPUT
--计算总记录数
end
--计算总页数
select
@TotalPage=CEILING((@totalRecord+0.0)/@PageSize)
if (@SqlWhere=
''
or
@sqlWhere=
NULL
)
set
@sql =
'Select * FROM (select ROW_NUMBER() Over(order by '
+ @OrderField +
') as rowId,'
+ @Fields +
' from '
+ @TableName
else
set
@sql =
'Select * FROM (select ROW_NUMBER() Over(order by '
+ @OrderField +
') as rowId,'
+ @Fields +
' from '
+ @TableName +
' where '
+ @SqlWhere
--处理页数超出范围情况
if @PageIndex<=0
Set
@pageIndex = 1
if @pageIndex>@TotalPage
Set
@pageIndex = @TotalPage
--处理开始点和结束点
Declare
@StartRecord
int
Declare
@EndRecord
int
set
@StartRecord = (@pageIndex-1)*@PageSize + 1
set
@EndRecord = @StartRecord + @pageSize - 1
--继续合成sql语句
set
@Sql = @Sql +
') as t where rowId between '
+
Convert
(
varchar
(50),@StartRecord) +
' and '
+
Convert
(
varchar
(50),@EndRecord)
print @sql
Exec
(@Sql)
---------------------------------------------------
If @@Error <> 0
Begin
RollBack
Tran
Return
-1
End
Else
Begin
Commit
Tran
Return
@totalRecord
---返回记录总数
End
END