赛迪网 > IT技术 数据库 > SQL Server
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

SQL查询中插入行号:自定义分页的另类实现

发布时间:2008.07.10 04:38     来源:赛迪网    作者:Andy

【赛迪网-IT技术报道】如何在SQL中对行进行动态编号,加行号这个问题,在数据库查询中,是经典的问题。

方法整理如下:

代码基于pubs样板数据库

在SQL中,一般就这两种方法.

1.使用临时表

可以使用select into 创建临时表,在第一列,加入Identify(int,1,1)作为行号,

这样在产生的临时表中,结果集就有了行号.也是目前效率最高的方法.

这种方法不能用于视图

代码:

set nocount on

select IDentify(int,1,1) 'RowOrder',au_lname,au_fname into #tmp from authors

select * frm #tmp

drop table #tmp

2.使用自连接

不用临时表,在SQL语句中,动态的进行排序.这种方法用到的连接是自连接,连接关系一般是

大于,

代码:

select rank=count(*), a1.au_lname, a1.au_fname

from authors a1 inner join authors a2 on a1.au_lname + a1.au_fname >= a2.au_lname + a2.au_fname

group by a1.au_lname, a1.au_fname

order by count(*)

运行结果:

rank au_lname au_fname

----------- ---------------------------------------- --------------------

1 Bennet Abraham

2 Blotchet-Halls Reginald

3 Carson Cheryl

4 DeFrance Michel

5 del Castillo Innes

6 Dull Ann

7 Greene Morningstar

... ....

缺点:

1.使用自联接,所以该方法不适用于处理大量行。它适用于处理几百行。

对于大型表,一定要使用索引以避免进行大范围的搜索,或用第一种方法.

2.不能正常处理重复值。当比较重复值时,会出现不连续的行编号。

如果不希望出现这种现象,可以在电子表格中插入结果时隐藏排序列,而是使用电子表格编号。

或用第一种方法

优点:

这些查询可以用于视图和结果格式设置中

在结果集中插入了行号,现在就可以将结果集合缓存起来,然后使用DataView,加入过滤条件

RowNum>PageIndex*PageSize And RowNum<=(PageIndex+1)*PageSize

就能实现快速的分页,而且不论你的页面数据绑定控件是什么(DataList,DataGrid,还是Repeate都可以)。

如果你使用的是DataGrid,那么建议不要使用这种技术。因为DataGrid的分页效率和它差不多。

(责任编辑:卢兆林)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 精华推荐:加速SQL查询的特征函数法 (01-05)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 信息化市场百家争鸣 SaaS深陷争议“泥潭”
· 提高管理水平 "两栖"CIO应具备的六大能力
· 国产ITIL运维先行者 四大厂商角力BI市场
· 金融行业GSN专题解决方案 企业网解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统