首  页
站长信箱
868搜索
网站登录
免费计数器
免费留言本
IP来源查询
网站技术教程
网站流量统计
文章探索:   分类:    关键字:  
    什么?你还在找兼职?上兼客吧,现在兼客吧平台太火了,知名度和诚信度也很高,注册就送0.5元现金,满3元就能提现,马上到账了!最低3元就能提现,大家可以注册下试试!注册地址:http://www.jiankeba.com/computeryc1688
  + 栏目导航
  + 相关文章
SQL Server 不存在或访问被拒绝
未与信任SQL Server连接相关联..
SQL Server数据库六种数据移动..
提高数据库访问速度
如何在两个SQLSERVER之间数据同..
将ACCESS的数据库转化为SQL SER..
动态创建SQL Server数据库、表..
在SQL Server中寻找资料库的TAB..
SQL Server 7.0储存过程调试指..
关于SQL Server 2000的安全配置
用SQL语句来建立跟踪的问题
SQL SERVER2000备份和恢复存储..
将Excel中的数据导入到SQL Serv..
SQL Server数据库文件恢复技术
千万级数据库高速分页显示
找出存放用户名和密码的表
SQL Server 7六种数据移动方法
SQL Server中读取XML文件的简单..
SQL Server 2000中的触发器使用
SQL Server中各个系统表的作用
在SQL Server存储过程中执行DTS..
Sqlserver中的一些技巧
SQL Server 2005:数据类型最大..
SQL Server 存储过程的分页
SQL Server 中易混淆的数据类型
SQL Server 服务器安装剖析
SQL Server导出导入数据方法
SQL数据恢复问题深入剖析
SQLServer和Oracle常用函数对比
用SQL Server为Web浏览器提供图..

技术教程 -> SQLserver教程 ->  
SQL Server 存储过程的分页
来源:csdn   人气:3676   录入时间:2006/3/25


    建立表:
   
   CREATE TABLE [TestTable] (
   [ID] [int] IDENTITY (1, 1) NOT NULL ,
   [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
   [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
   [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
   [Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL
   ) ON [PRIMARY]
   GO
   
   
   
   插入数据:(2万条,用更多的数据测试会明显一些)
   SET IDENTITY_INSERT TestTable ON
   
   declare @i int
   set @i=1
   while @i<=20000
   begin
   insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, ''FirstName_XXX'',''LastName_XXX'',''Country_XXX'',''Note_XXX'')
   set @i=@i+1
   end
   
   SET IDENTITY_INSERT TestTable OFF
   
   
   
   -------------------------------------
   
   分页方案一:(利用Not In和SELECT TOP分页)
   语句形式:
   SELECT TOP 10 *
   FROM TestTable
   WHERE (ID NOT IN
   (SELECT TOP 20 id
   FROM TestTable
   ORDER BY id))
   ORDER BY ID
   
   
   SELECT TOP 页大小 *
   FROM TestTable
   WHERE (ID NOT IN
   (SELECT TOP 页大小*页数 id
   FROM 表
   ORDER BY id))
   ORDER BY ID
   
   -------------------------------------
   
   分页方案二:(利用ID大于多少和SELECT TOP分页)
   语句形式:
   SELECT TOP 10 *
   FROM TestTable
   WHERE (ID >
   (SELECT MAX(id)
   FROM (SELECT TOP 20 id
   FROM TestTable
   ORDER BY id) AS T))
   ORDER BY ID
   
   
   SELECT TOP 页大小 *
   FROM TestTable
   WHERE (ID >
   (SELECT MAX(id)
   FROM (SELECT TOP 页大小*页数 id
   FROM 表
   ORDER BY id) AS T))
   ORDER BY ID
   
   
   -------------------------------------
   
   分页方案三:(利用SQL的游标存储过程分页)
   create procedure XiaoZhengGe
   @sqlstr nvarchar(4000), --查询字符串
   @currentpage int, --第N页
   @pagesize int --每页行数
   as
   set nocount on
   declare @P1 int, --P1是游标的id
   @rowcount int
   exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
   select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页
   set @currentpage=(@currentpage-1)*@pagesize+1
   exec sp_cursorfetch @P1,16,@currentpage,@pagesize
   exec sp_cursorclose @P1
   set nocount off
   
   其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
   建议优化的时候,加上主键和索引,查询效率会提高。
   
   通过SQL 查询分析器,显示比较:我的结论是:
   分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
   分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句
   分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用
   
   在实际情况中,要具体分析。
   
   



| 网站转让 | 站长信箱 | 网站登录 | 技术教程 | 免费计数器 | 免费留言本 | 868流量统计 | 好帮手网站营销 |
地址:广东省阳江市  联系电话:13725641179 杨先生
Copyright 2004-2021 868资源网- 版权所有    粤ICP备05007330号