热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL2005分页存储过程优化与实现详解

本文详细介绍了在SQLServer2005中优化和实现分页存储过程的方法。通过创建一个名为`[dbo].[GetUsers]`的存储过程,该过程接受两个参数:`@RowIndex`(当前指定的页数)和`@RecordCount`(每页显示的记录数)。文章不仅提供了具体的代码示例,还深入探讨了性能优化技巧,包括索引使用和查询优化策略,以提高分页查询的效率和响应速度。
CREATE PROCEDURE [dbo].[GetUsers]
    @RowIndex int,----當前指定的頁數
    @RecordCount int----每頁顯示的記錄數
AS
BEGIN
    SET NOCOUNT ON;

    With VUsers as (
        select *,row_number() over (order by UserID desc) as RowNum
        from MyUsers
)

    select * from VUsers
    where RowNum > @RowIndex and RowNum <= (@RowIndex+@RecordCount)    
END

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
Alter PROCEDURE UP_GetRecordByPage  
   @tblName      varchar(255),       -- 表名 
   @keyName   varchar(255),  --主键
   @PageSize     int = 10,           -- 页尺寸
   @PageIndex    int = 0 ,         -- 页码  
   @strWhere     varchar(1000) = ''  -- 查询条件 (注意: 不要加 where)
AS 
declare @strSQL   varchar(6000)       -- 主语句
declare  @beginItemIndex  int    --开始项
declare  @endItemIndex  int     --结束项
set @beginItemIndex=@PageIndex*@PageSize
set @endItemIndex=@beginItemIndex+@PageSize
set @strSQl='Select top 10 * FROM
(
select *,
ROW_NUMBER() OVER( orDER BY '+@keyName+' DESC ) as rowNo 
from '
set @strSQL=@strSQL+@tblName+' where 1=1 '
 if @strWhere!=''
begin 
set @strSQL=@strSQL+@strWhere;
end
 
set @strSQL=@strSQL+') 
AS tabeTemp 
Where RowNo >='+cast (@beginItemIndex as varchar ) +' and RowNo <='+ cast (@endItemIndex as 

varchar)
print @strSQL
exec(@strSQL)
go

推荐阅读
author-avatar
li永不言败ly_608
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有