SQL Server2005通用分页存储过程
来源:互联网 发布:郴州公务员待遇知乎 编辑:程序博客网 时间:2024/05/16 06:45
在SQL Server2005中添加了一个新的函数:row_number(),返回结果集分区内行的序列号。
那么我现在就用这个函数做一个通用的分页方法,在和以前大家经常用到的那三种方法相比,它的优点:第一,当然是比较通用了,第二:性能很出色,有90多万条的数据,用这样的存储过程建立正确的索引,只有几十毫秒的时间。
代码如下:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: hao.w
-- Create date: 2008.1.15
-- Description: SqlServer2005通用分页方法
-- =============================================
ALTER PROCEDURE sp_CommonPage
(@sql nvarchar(4000), @BeginIndex int, @EndIndex int)
AS
BEGIN
DECLARE @ResultSql nvarchar(4000);
DECLARE @OrderStr nvarchar(400);
DECLARE @SelectStr nvarchar(3000);
DECLARE @OtherStr nvarchar(1000);
DECLARE @ColumnsStr nvarchar(2000);
DECLARE @OrderIndex int;
DECLARE @FromIndex int;
SET @OrderIndex = Charindex('Order',@sql,0);
SET @FromIndex= Charindex('From',@sql,0);
SET @SelectStr = Left(@sql,@FromIndex-1);
SET @ColumnsStr = Substring(@Sql,7,@FromIndex-7);
SET @OtherStr = Substring(@sql, @FromIndex,@OrderIndex-@FromIndex);
SET @ORderStr = Right(@sql,len(@sql)-@OrderIndex+1);
SET @ResultSql = @SelectStr + ',row_number() Over('+@OrderStr+') RowNumber '
+@OtherStr;
Set @ResultSql = 'Select '+@ColumnsStr+' from('+@ResultSql+')Temp where RowNumber between '
+Str(@BeginIndex) + ' AND ' + Str(@EndIndex)
EXEC(@ResultSql)
END
使用该存储过程务必要在Where 子句中使用的列和Order By子句中使用的列
那么我现在就用这个函数做一个通用的分页方法,在和以前大家经常用到的那三种方法相比,它的优点:第一,当然是比较通用了,第二:性能很出色,有90多万条的数据,用这样的存储过程建立正确的索引,只有几十毫秒的时间。
代码如下:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: hao.w
-- Create date: 2008.1.15
-- Description: SqlServer2005通用分页方法
-- =============================================
ALTER PROCEDURE sp_CommonPage
(@sql nvarchar(4000), @BeginIndex int, @EndIndex int)
AS
BEGIN
DECLARE @ResultSql nvarchar(4000);
DECLARE @OrderStr nvarchar(400);
DECLARE @SelectStr nvarchar(3000);
DECLARE @OtherStr nvarchar(1000);
DECLARE @ColumnsStr nvarchar(2000);
DECLARE @OrderIndex int;
DECLARE @FromIndex int;
SET @OrderIndex = Charindex('Order',@sql,0);
SET @FromIndex= Charindex('From',@sql,0);
SET @SelectStr = Left(@sql,@FromIndex-1);
SET @ColumnsStr = Substring(@Sql,7,@FromIndex-7);
SET @OtherStr = Substring(@sql, @FromIndex,@OrderIndex-@FromIndex);
SET @ORderStr = Right(@sql,len(@sql)-@OrderIndex+1);
SET @ResultSql = @SelectStr + ',row_number() Over('+@OrderStr+') RowNumber '
+@OtherStr;
Set @ResultSql = 'Select '+@ColumnsStr+' from('+@ResultSql+')Temp where RowNumber between '
+Str(@BeginIndex) + ' AND ' + Str(@EndIndex)
EXEC(@ResultSql)
END
使用该存储过程务必要在Where 子句中使用的列和Order By子句中使用的列
- SQL Server2005通用分页存储过程
- SQL Server2005通用分页存储过程
- SQL Server2005通用分页存储过程
- sql server2005 rownum通用存储过程分页
- sql server2005 rownum通用存储过程分页
- sql server2005 rownum通用存储过程分
- 一个sql server2005分页的存储过程
- SQL 通用分页存储过程
- SQL 通用分页存储过程
- sql通用分页存储过程
- sql 通用分页存储过程
- sql 通用分页存储过程
- SQL分页通用存储过程
- 通用sql分页存储过程
- 通用SQL分页存储过程
- 【转载】Sql Server2005不同分页存储过程的性能对比
- Sql Server2005用Row_Number分页存储过程的性能实测
- Sql Server2005学习笔记(存储过程:分页小程序)
- [-- NetBeans 6.0 安装和配置Ruby Support --]
- TextBox控件文本居右问题
- 新来的
- ASP.NET程序中常用代码汇总
- WINDOWS -> 端口详解及如何开起端口关闭端口 [打印本页]
- SQL Server2005通用分页存储过程
- delphi语法基础--过程
- Oracle的左连接和右连接
- 在iMac上安装Tiger,在DMG方式安装Leopard
- 转发:Using HQL (Hibernate Query language) http://www.castleproject.org/activerecord/documentation/v1rc1/usersguide/hql.html
- C# 创建文件并往文件里写内容
- Bugzilla简明使用手则
- Struts中配置Action
- Java/JSP中使用JDBC连接SQL Server 2005