日期:2014-05-18  浏览次数:20569 次

向大家请教一个问题,在一句update语句中,变量难道可以自增吗?有代码示例
大家将下列代码贴到查询分析器中,运行一下,你会发现在update语句中,一个变量竟然会自增,自增的次数等于表的记录条数。
就是这一句:update   #   set   @i=@i+1,自增=@i
在一句代码中,竟然变量可以自增。这是什么道理呀?

======================================
use   northwind
go

select   orderid,customerid,1   as   自增   into   #
from   orders   order   by   orderid   desc

declare   @i   int
set   @i=0
update   #   set   @i=@i+1,自增=@i

select   *
from   #

--drop   table   #


------解决方案--------------------
当然啊,简单意义上说就是相当于循环,次数为满足条件的纪录条数
------解决方案--------------------
没错,在update的记录顺序上,每记录执行一次@i=@i+1。
------解决方案--------------------
update # set自增=@i, @i=@i+1
====
自增, @i的赋值是同时进行的(并行的)
也就是说自增赋值时, @i的值还没有更新
------解决方案--------------------
变量的赋值优先。


先执行变量自增,再将变量更新到字段。
------解决方案--------------------
好语句
------解决方案--------------------
自增, @i的赋值是同时进行的(并行的)
也就是说自增赋值时, @i的值还没有更新
-----------------
应该不是这样的,因为@i的初值为0,可是第一次为字段赋值时,@i的值是1呀.
所以说是先执行变量自增.然后赋给字段的.所以变量的赋值优先于字段的赋值
------解决方案--------------------
这样的情况我也遇到过,自增,@i的赋值都是并行的,更新的结果都是一样的