高性能分页存储过程

select count(1) from dbo.GatherKeyWordInfo
dbo.p_PartPage 'GatherKeyWordInfo','GatherKeyWordID',5,1000,'','',''
exec [dbo].[p_PartPage] 'V_GatherKeyWordInfo','GatherKeyWordID','*',5,1000,'','newid()',''
select top 10 * from V_GatherKeyWordInfo





if(object_id('p_PartPage') is not null)
drop proc [dbo].[p_PartPage]
go
create PROCEDURE [dbo].[p_PartPage]
@tableName varchar(50),
@tableId varchar(50),
@pageIndex int,         -- 当前页索引
@pageSize int,            -- 每页显示多少条
@strWhere varchar(500), -- 查询条件
@order varchar(50),  -- 排序 如: id asc,time desc
@Fields varchar(1000) = '*'--读取字段
AS

DECLARE @strFilter varchar(2000)
declare @sql varchar(8000)
IF @strWhere IS NOT NULL AND @strWhere != ''
  BEGIN
   SET @strFilter = ' WHERE ' + @strWhere + ' '
  END
ELSE
  BEGIN
   SET @strFilter = ''
  END
if @orderCol = ''
  set @orderCol = @tableId

IF @pageIndex < 1
  SET @pageIndex = 1

if @pageIndex = 1 --第一页提高性能
begin
  set @sql = 'select top ' + str(@PageSize) +' '+@Fields+ '  from ' + @tableName + ' ' + @strFilter + ' ORDER BY  '+ @order
end
else
  begin
  /**//*Execute dynamic query*/    
   DECLARE @START_ID varchar(50)
DECLARE @END_ID varchar(50)
SET @START_ID = convert(varchar(50),(@pageIndex - 1) * @PageSize + 1)
SET @END_ID = convert(varchar(50),@pageIndex * @PageSize)
    set @sql =  ' SELECT '+@Fields+ '
   FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@orderCol+') AS rownum,
     '+@Fields+ '
      FROM '+@tableName+' ' +@strFilter+') AS D
   WHERE rownum BETWEEN '+@START_ID+' AND ' +@END_ID +' ORDER BY '+@order
  END
  set @sql = @sql + '; SELECT  Count(*) FROM ' + @tableName + @strFilter  
EXEC(@sql)
go

select * from sysobjects where name = 'p_PartPage'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值