SQL Server2005通用分页存储过程

<script type="text/javascript">show_ads_zone(112);</script> <script language="JavaScript" src="http://z.csdn.net/adjs.php?n=342163842&what=zone:112&charset=utf-8&exclude=," type="text/javascript"></script>   http://database.csdn.net/page/da72108f-e6a7-4654-8c1c-40e0c1a3d36d

在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子句中使用的列 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值