标识列(identity)的妙用

用户需求:

用户有这样一个表test

 

Ip

Name

127.3.2.0

Ken

127.3.2.0

King

127.3.2.0

Kent

 

希望通过SQL语句实现更新表test中现有行的ip列值,依次按照127.0.0.1、127.0.0.2依次类推,即最后一位依次递增。

问题分析:

 我们首先通过临时表做个测试,测试一下代码并查看输出结果

 1 --生成测试数据   
 2  create   table   tab(id   varchar(5)   ,   tt   varchar(5))   
 3    
 4  insert   into   tab     
 5  select   'w','a'   
 6  union   select   'r','b'   
 7  union   select   'x','c'   
 8  union   select   'a','d'   
 9  union   select   'f','e'   
10    
11  select   *   from   tab   
12  /*   
13  id tt   
14  -------------------   
15  a d   
16  f e   
17  r b   
18  w a   
19  x c   
20  */
   
21    
22  --UPDATE   
23  ALTER   TABLE   tab   ADD   index_c   int   IDENTITY(1,1)   
24  UPDATE   TAB   SET     id   =   index_c   
25  ALTER   TABLE   tab   DROP   COLUMN     index_c     
26    
27    
28  select   *   from   tab   
29  /*   
30  id tt   
31  -------------------   
32  1 d   
33  2 e   
34  3 b   
35  4 a   
36  5 c   
37  */
   
38    
39  --删除测试数据   
40  drop   table   tab 
41

 

解决办法:

参考上例我们处理如下

Step1:    ALTER   TABLE   test   ADD   index_c   int   IDENTITY(1,1)  
Step2:
UPDATE   test   SET     ip   =   '172.22.8.' + cast( index_c  as varchar)
ALTER   TABLE   test   DROP   COLUMN     index_c
select * from test
执行后结果如下:

 

Ip

Name

127.0.0.1

Ken

127.0.0.2

King

127.0.0.3

Kent

posted @ 2008-12-10 22:22  向阳  阅读(412)  评论(3编辑  收藏  举报