拼吾爱程序人生

首页 » 数据库编程 » SQL » 关于如何在查询结果中添加自动编号
Systemjudge - 2007-8-6 17:00:00
往往经常有这样的需求,我需要在查询的结果中添加一列类似于Identity的数字,虽然在Client编程中并不难实现,但是有时我想留用现有的Class,不希望在Client side做额外的coding,那么就只有在Sql里面想办法了
 
   
   
   
 
 
   
   
     
       
         
       
     
     
   
 
 
   
   
   
 

首先介绍一种用一条SQL语句完成的办法,原理是在结果中查询大于等于该纪录的纪录条数,就可以得到它的Rank了
Example:
USE pubs
SELECT COUNT(*) AS Rank, a1.au_lname, a1.au_fname
  FROM authors a1, authors a2
  WHERE a1.au_lname  a1.au_fname >= a2.au_lname  a2.au_fname
  GROUP BY a1.au_lname, a1.au_fname
  ORDER BY Rank
不过呢,这种方法有它的局限性,第一是性能不好,第二是如果存在相同的纪录,那么Rank就会出现并列的情况,比如出现两个2,但是没有3了
有没有别的方法呢?当然有的,SQL提供了一个IDENTITY Function,可以得到标识列的值,不过可惜的很的是,这个函数只能用于SELECT INTO语句,所以我们只好引入一个临时表了
Example:
USE pubs
SELECT IDENTITY(INT, 1, 1) AS Rank,au_lname,au_fname
  INTO #tmp
  FROM authors
SELECT * FROM #tmp
DROP TABLE #tmp
这种方法的性能和适用性都比第一种方法要强,不过缺点是必须通过几条SQL语句才能完成。
所以如果可能的话,一般还是建议在客户端完成这一操作

Thanks for your read and any advise.

 您可能对 [SQL] 的这些文章也感兴趣:

几条常见的数据库分页 SQL 语句数据库
高性能SQL语句的编写技巧
使用存储过程的益处
口令中包含@导致无法连接数据库的解决方法
SQL之行列互变问题
通过sql语句获取数据库的基本信息
将指定日期所在月份的所有日期按照周次输出
跟NHibernate之夏一起学习NHibernate
SQL优化之使用 EXISTS 代替 IN 和 关联查询(inner join)
将一个表分开导出成不同文件的实用方法
提高SQL执行效率的几点建议
数据库管理员(DBA)日常必备的sql列表
1
查看完整版本: 关于如何在查询结果中添加自动编号
Modify by pin5i DZNT_ExpandPackage 2.1.3295 2007-2009 pin5i.com
 Total Unique Visitors: