sqlserver 高效分页的存储过程 基于ROW_NUMBER()

USE [LotteryData]
GO
/****** Object:  StoredProcedure [dbo].[sp_GetLotteryOrderByWhere]    Script Date: 01/06/2011 19:20:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER proc [dbo].[sp_GetLotteryOrderByWhere]
@UserName varchar(50),
@OrderNo varchar(50),
@StartDate varchar(50),
@EndDate varchar(50),
@ProductID  int ,
@LotteryIssueID varchar(20),
@Status int,
@LotteryStatus int,
@PageSize int,
@PageIndex int,--从0开始
@PageCounts int output,
@TotalPayMoney decimal output,
@TotalAwardMoney decimal output,
@TotalCount int output,
@MinAwardMoney decimal,
@MaxAwardMoney decimal,
@LotteryProviderID int
 as
 Begin
 set nocount on
 --
 select  @TotalCount=COUNT(*),@PageCounts=Count(1),@TotalPayMoney=sum(TotalPrice),@TotalAwardMoney=sum(TotalAwardMoney)
 from 
 lotteryOrder lo with(nolock) 
 inner join LotteryUser..users lu with(nolock) on lo.UserID=lu.UserId
 where 
 (lu.UserName = @UserName or @UserName = '')
 and (@OrderNo = '' or  lo.OrderId like '%'+@OrderNo+'%' or lo.AgentOrderID like '%'+@OrderNo+'%')
 and lo.CreatedDate between @StartDate and @EndDate 
 and (@LotteryIssueID = '' or lo.IssueID = @LotteryIssueID) 
 and (@Status=-1 or  lo.Status=@Status) 
 and (@LotteryStatus=-1 or lo.LotteryStatus=@LotteryStatus)
 and (@ProductID=-1 or lo.ProductId=@ProductID)
 and (@LotteryProviderID=-1 or lo.EngineID=@LotteryProviderID)
 and ((lo.TotalAwardMoney between @MinAwardMoney and @MaxAwardMoney) or (@MinAwardMoney=0 or @MaxAwardMoney=0))
--设置那一行开始
DECLARE @start_item AS INTEGER
--计算此页中从第几个开始显示
set @start_item=@PageIndex*@PageSize

select * from (
   select ROW_NUMBER() over (order by lo.createdDate desc) as item ,lo.*, u.UserName , lo.ProductID as ProductName from 
    lotteryOrder lo with(nolock)
   --inner join LotteryUser..Product lp with(nolock) on lo.ProductId=lp.ProductID
   inner join LotteryUser..users u with(nolock) on lo.userID= u.UserId
   where 
   (u.UserName = @UserName or @UserName = '')
   and (@OrderNo = '' or lo.OrderId like '%'+@OrderNo+'%' or lo.AgentOrderID like '%'+@OrderNo+'%')
   and lo.CreatedDate between @StartDate and @EndDate 
   and (@LotteryIssueID = '' or lo.IssueID = @LotteryIssueID)
   and (@Status=-1 or  lo.Status=@Status) 
   and (@LotteryStatus=-1 or lo.LotteryStatus=@LotteryStatus) 
   and (@ProductID=-1 or lo.ProductId=@ProductID) 
   and (@LotteryProviderID=-1 or lo.EngineID=@LotteryProviderID)
   and ((lo.TotalAwardMoney between @MinAwardMoney and @MaxAwardMoney) or (@MinAwardMoney=0 or @MaxAwardMoney=0))
   )as T where T.item>=@start_item+1 and T.item<=@start_item+@PageSize

 end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值