SQL Server 2005分页存储过程
2008-03-06 15:57
501 查看
Sql Server 2005出来已经很久了,一些新的功能应该得到更好的应用,下面是利用2005里面新的函数ROW_NUMBER() 写的分页存储过程(一个老外写的,我就直接Copy过来了):
CREATE PROCEDURE [dbo].[utilPAGE]
@datasrc nvarchar(200)
,@orderBy nvarchar(200)
,@fieldlist nvarchar(200) = '*'
,@filter nvarchar(200) = ''
,@pageNum int = 1
,@pageSize int = NULL
AS
SET NOCOUNT ON
DECLARE
@STMT nvarchar(max) -- SQL to execute
,@recct int -- total # of records (for GridView paging interface)
IF LTRIM(RTRIM(@filter)) = '' SET @filter = '1 = 1'
IF @pageSize IS NULL BEGIN
SET @STMT = 'SELECT ' + @fieldlist +
'FROM ' + @datasrc +
'WHERE ' + @filter +
'ORDER BY ' + @orderBy
EXEC (@STMT) -- return requested records
END ELSE BEGIN
SET @STMT = 'SELECT @recct = COUNT(*)
FROM ' + @datasrc + '
WHERE ' + @filter
EXEC sp_executeSQL @STMT, @params = N'@recct INT OUTPUT', @recct = @recct OUTPUT
SELECT @recct AS recct -- return the total # of records
DECLARE
@lbound int,
@ubound int
SET @pageNum = ABS(@pageNum)
SET @pageSize = ABS(@pageSize)
IF @pageNum < 1 SET @pageNum = 1
IF @pageSize < 1 SET @pageSize = 1
SET @lbound = ((@pageNum - 1) * @pageSize)
SET @ubound = @lbound + @pageSize + 1
IF @lbound >= @recct BEGIN
SET @ubound = @recct + 1
SET @lbound = @ubound - (@pageSize + 1) -- return the last page of records if -- no records would be on the
-- specified page
END
SET @STMT = 'SELECT ' + @fieldlist + '
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY ' + @orderBy + ') AS row, *
FROM ' + @datasrc + '
WHERE ' + @filter + '
) AS tbl
WHERE
row > ' + CONVERT(varchar(9), @lbound) + ' AND
row < ' + CONVERT(varchar(9), @ubound)
EXEC (@STMT) -- return requested records
END
[align=left]@datasrc[/align] | [align=left] [/align] | [align=left]- the table (or stored procedure, etc.) name[/align] |
[align=left]@orderBy[/align] | [align=left]- the ORDER BY clause[/align] | |
[align=left]@fieldlis[/align] | [align=left]- the fields to return (including calculated expressions)[/align] | |
[align=left]@filter[/align] | [align=left]- the WHERE clause[/align] | |
[align=left]@pageNum[/align] | [align=left]- the page to return (must be greater than or equal to one)[/align] | |
[align=left]@pageSize[/align] | [align=left]- the number of records per page[/align] |
@datasrc nvarchar(200)
,@orderBy nvarchar(200)
,@fieldlist nvarchar(200) = '*'
,@filter nvarchar(200) = ''
,@pageNum int = 1
,@pageSize int = NULL
AS
SET NOCOUNT ON
DECLARE
@STMT nvarchar(max) -- SQL to execute
,@recct int -- total # of records (for GridView paging interface)
IF LTRIM(RTRIM(@filter)) = '' SET @filter = '1 = 1'
IF @pageSize IS NULL BEGIN
SET @STMT = 'SELECT ' + @fieldlist +
'FROM ' + @datasrc +
'WHERE ' + @filter +
'ORDER BY ' + @orderBy
EXEC (@STMT) -- return requested records
END ELSE BEGIN
SET @STMT = 'SELECT @recct = COUNT(*)
FROM ' + @datasrc + '
WHERE ' + @filter
EXEC sp_executeSQL @STMT, @params = N'@recct INT OUTPUT', @recct = @recct OUTPUT
SELECT @recct AS recct -- return the total # of records
DECLARE
@lbound int,
@ubound int
SET @pageNum = ABS(@pageNum)
SET @pageSize = ABS(@pageSize)
IF @pageNum < 1 SET @pageNum = 1
IF @pageSize < 1 SET @pageSize = 1
SET @lbound = ((@pageNum - 1) * @pageSize)
SET @ubound = @lbound + @pageSize + 1
IF @lbound >= @recct BEGIN
SET @ubound = @recct + 1
SET @lbound = @ubound - (@pageSize + 1) -- return the last page of records if -- no records would be on the
-- specified page
END
SET @STMT = 'SELECT ' + @fieldlist + '
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY ' + @orderBy + ') AS row, *
FROM ' + @datasrc + '
WHERE ' + @filter + '
) AS tbl
WHERE
row > ' + CONVERT(varchar(9), @lbound) + ' AND
row < ' + CONVERT(varchar(9), @ubound)
EXEC (@STMT) -- return requested records
END
相关文章推荐
- SQL SERVER 2005分页存储过程
- sql server 2005分页存储过程和sql server 2000分页存储过程
- SQL Server 2005高效分页存储过程
- 利用Sql Server 2005的新函数ROW_NUMBER()写的高效分页存储过程
- SQL Server 2000和2005通用分页存储过程
- SQL Server 2005的通用分页存储过程
- SQL SERVER 2005分页存储过程
- sql server 2005分页存储过程和sql server 2000分页存储过程(摘)
- SQL Server 2005分页存储过程
- 基于SQL Server 2005新特性的分页存储过程
- SQL SERVER 2005分页存储过程
- sql server 2005分页存储过程和sql server 2000分页存储过程(转,来源不明)
- SQL SERVER 2005分页存储过程
- 解密SQL SERVER 2005加密存储过程,函数
- sql server 2005 几个常用的存储过程或函数
- 在SQL Server 2005中用存储过程实现搜索功能
- [翻译]在Visual Studio 2005中调试SQL Server 2005的存储过程
- 分页 - sql server 2005
- sql server 分页、存储过程、视图
- C#拼接SQL语句,SQL Server 2005+,多行多列大数据量情况下,使用ROW_NUMBER实现的高效分页排序