SQLServer 2005通用分页存储过程
2010-01-06 09:07
501 查看
通过SQLServer 2005之后新加入的ROW_NUMBER()函数进行分页:
set
ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Description: <通用分页存储过程>
-- =============================================
Create PROCEDURE [dbo].[ClientNewsPager]
@talbeName varchar(255)='', -- 表名
@getFields varchar(1000)='*', -- 需要返回的列
@orderBy varchar(255)='', -- 排序的字段名
@PageSize int=15, -- 页尺寸
@PageIndex int=1, -- 页码,从1开始
@doCount bit=0, -- 返回记录总数, 非 0 值则返回
@whereStr varchar(1500)='' -- 查询条件 (注意: 不要加 where)
AS
BEGIN
declare @rowResult int
Begin Tran
declare @strSQL varchar(5000)
declare @startRowIndex int
declare @maximumRows int
set @startRowIndex = (@PageIndex - 1) * @PageSize
set @maximumRows = @startRowIndex + @PageSize
if(@doCount!=0)
begin
if @whereStr !=''
set @strSQL = 'select id from ' + @talbeName + ' where '+ @whereStr
else
set @strSQL = 'select id from ' + @talbeName
end
else
begin
if(@whereStr!='')
begin
set @strSQL = 'SELECT ' + @getFields + ' FROM (SELECT ROW_NUMBER() OVER (ORDER BY ' + @orderBy + ') AS RowsNum,' + @getFields + ' FROM ' + @talbeName + ' where ' + @whereStr + ') AS TMP WHERE (RowsNum > ' + str(@startRowIndex) + ' AND RowsNum <= ' + str(@maximumRows) + ')'
end
else
begin
set @strSQL = 'SELECT ' + @getFields + ' FROM (SELECT ROW_NUMBER() OVER (ORDER BY ' + @orderBy + ') AS RowsNum,' + @getFields + ' FROM ' + @talbeName + ') AS TMP WHERE (RowsNum > ' + str(@startRowIndex) + ' AND RowsNum <= ' + str(@maximumRows) + ')'
end
end
exec(@strSQL)
Set @rowResult = @@ROWCOUNT
If @@Error <> 0
Begin
RollBack Tran
Return -1
End
Else
Begin
Commit Tran
Return @rowResult
End
END
set
ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Description: <通用分页存储过程>
-- =============================================
Create PROCEDURE [dbo].[ClientNewsPager]
@talbeName varchar(255)='', -- 表名
@getFields varchar(1000)='*', -- 需要返回的列
@orderBy varchar(255)='', -- 排序的字段名
@PageSize int=15, -- 页尺寸
@PageIndex int=1, -- 页码,从1开始
@doCount bit=0, -- 返回记录总数, 非 0 值则返回
@whereStr varchar(1500)='' -- 查询条件 (注意: 不要加 where)
AS
BEGIN
declare @rowResult int
Begin Tran
declare @strSQL varchar(5000)
declare @startRowIndex int
declare @maximumRows int
set @startRowIndex = (@PageIndex - 1) * @PageSize
set @maximumRows = @startRowIndex + @PageSize
if(@doCount!=0)
begin
if @whereStr !=''
set @strSQL = 'select id from ' + @talbeName + ' where '+ @whereStr
else
set @strSQL = 'select id from ' + @talbeName
end
else
begin
if(@whereStr!='')
begin
set @strSQL = 'SELECT ' + @getFields + ' FROM (SELECT ROW_NUMBER() OVER (ORDER BY ' + @orderBy + ') AS RowsNum,' + @getFields + ' FROM ' + @talbeName + ' where ' + @whereStr + ') AS TMP WHERE (RowsNum > ' + str(@startRowIndex) + ' AND RowsNum <= ' + str(@maximumRows) + ')'
end
else
begin
set @strSQL = 'SELECT ' + @getFields + ' FROM (SELECT ROW_NUMBER() OVER (ORDER BY ' + @orderBy + ') AS RowsNum,' + @getFields + ' FROM ' + @talbeName + ') AS TMP WHERE (RowsNum > ' + str(@startRowIndex) + ' AND RowsNum <= ' + str(@maximumRows) + ')'
end
end
exec(@strSQL)
Set @rowResult = @@ROWCOUNT
If @@Error <> 0
Begin
RollBack Tran
Return -1
End
Else
Begin
Commit Tran
Return @rowResult
End
END
相关文章推荐
- sqlserver 2005 中的分页存储过程
- SqlServer 2000、2005分页存储过程整理第1/3页
- SqlServer中使用row_number() over实现通用的分页存储过程
- SqlServer通用的分页存储过程
- 【转】最通用的分页存储过程SqlServer
- SQL SERVER 2005 通用高效分页存储过程
- SQLSERVER分页通用存储过程
- SQL2005 存储过程通用分页
- 真正高效的SQLServer中数据分页的通用存储过程
- SQL 2005通用分页存储过程
- MS SQL 2005 最简单最通用的分页存储过程
- MS SQL Server 2005 通用分页存储过程
- SQLServer 实现分页的通用存储过程
- 一个通用的分页存储过程实现-SqlServer(附上sql源码,一键执行即刻搭建运行环境)
- SQL Server 2005通用分页存储过程及多表联接应用
- SQLSERVER 通用分页存储过程
- sqlserver 通用存储过程分页代码(附使用ROW_NUMBER()和不使用ROW_NUMBER()两种情况性能分析)