日期:2014-05-19  浏览次数:20825 次

几行生成自增列的代码,功能没问题,想问一下为何可以这样用,语法依据是什么,有代码
各位老师,以下代码可以将某一个固定值的列,修改其值成为自增列。我试过,功能完全正常。可是我不知为何可以这样用,语法依据是什么?
关键的一句不明白:
declare   @i   int
set   @i=0         --可以令自增列从1开始,如果@i=1,则自增列会从2开始,依此类推
update   #   set   自编号=@i,@i=@i+1

其中的   set   自编号=@i,@i=@i+1   是什么意义,如何可以实现?

全部代码如下所示:
--建一个没有自增列的表
create   table   ta(id   int,name   int)
insert   ta   select   1,2  
union   all   select   1,31
union   all   select   1,32
union   all   select   1,33
union   all   select   1,34
union   all   select   1,35
union   all   select   1,36
union   all   select   1,37
union   all   select   1,38
union   all   select   1,39

--看一下这个表
select   *
from   ta

--生成一个新表,自增列令其全为1
select   *,自编号=1   into   #   from   ta

--看一下这个临时表
select   *   from   #

--修改自增列,令其值为自增
declare   @i   int
set   @i=0         --可以令自增列从1开始,如果@i=1,则自增列会从2开始,依此类推
update   #   set   自编号=@i,@i=@i+1

--查询一下自增列的值
select   *   from   #

drop   table   #


------解决方案--------------------
学习,先谢谢你的提问,我查了帮助,update中可以更新变量,经实验,变量值优先,由此看来以前问交换列可用一条语句实现
update # set 自编号=@i,@i=@i+1,先执行后变量的更新,再将变量值给列
------解决方案--------------------
而且可能是逐条记录执行下去的,才会实现逐级增益的效果。
------解决方案--------------------
declare @i int
set @i=0
update # set 自编号=@i,@i=@i+1
--------------
是呀,为何@i=0的情况下,自编号被赋的值是1呢?存在一个优先级的问题,帮助上没有明确说明