在Sql Server 2005中,我们可以利用新增函数row_number()来更高效的实现分页存储

  CREATE PROCEDURE p_GetStudentInfo 
  @PageSize INT
  @PageIndex INT, 
  @strWhere varchar(1500) -- 查询条件(注意: 不要加where) 
  As 
  Begin 
  select * from ( 
  select row_number() over (order by StudentInfoId) row,* from StudentInfo ) StudentInfo 
  where row between @PageSize*(@PageIndex-1) and @PageSize*@PageIndex 
  End 
  go

 

 

通用方法

USE [OrderDB]
GO
/****** Object:  StoredProcedure [dbo].[sp_splitpage]    Script Date: 03/20/2012 13:46:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[sp_splitpage]
  @sql NVARCHAR(4000),--要执行的sql语句
  @page INT = 1, --要显示的页码
  @pageSize INT, --每页的大小
  @pageCount INT = 0 OUT, --总页数
  @recordCount INT = 0 OUT --总记录数
  
AS 
Begin
  DECLARE @usetime DATETIME
  
  IF @page = 0 

      BEGIN

          SET @page = 1

      END

  SET @usetime = GETDATE()

  SET nocount ON

  DECLARE @p1 INT

  EXEC sp_cursoropen @p1 OUTPUT, @sql, @scrollopt = 1, @ccopt = 1,

      @rowcount = @pagecount OUTPUT

  SET @recordCount = @pageCount

 

  IF ( @page > CEILING(1.0 * @pagecount / @pagesize) ) 

      BEGIN

          SET @page = CEILING(1.0 * @pagecount / @pagesize)

      END

  SELECT @pagecount = CEILING(1.0 * @pagecount / @pagesize),

          @page = ( @page - 1 ) * @pagesize + 1

  EXEC sp_cursorfetch @p1, 16, @page, @pagesize 

  EXEC sp_cursorclose @p1
End

  

转载于:https://www.cnblogs.com/songxiii/archive/2012/02/03/2336754.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值