在sql2008里:
declare @Account varchar(50)
update top(2) AppraiseGuild set [state]=1,@Account=Account where [state]<>1
print @Account
这个语句是可以执行的
但是变量@Account 只能得到最后一个更新的值,而拿不到两条的值!
我们怎么样能拿到全部被更新的值呢?
范围限定对着吗?
????没明白你是啥意思
@长风之子: 就是你where后面的对着?
@wvsy: 查询条件没问题!
呵呵,这个等于update AppraiseGuild set [state]=1,@Account=Account where [state]<>1
print @Account
NO,我的更新前面是有top(2)的,也就是更新两条,你写的这个语句只是更新一条,操作结果也是不一样的!
先将Account的值SELECT出来,然后再更新
这样会存在并发问题,如果有两个用户同事操作,第一个用户select以后,准备去update,这时候第二个用户进来了,他也select了一下,和第一个用户得到的结果是一样的,这时候第一个用户在第二个用户select之后进行了一步update操作,那么第二个用户再去update的时候,他select出来的值和他update的值是不一样的,那第二个用户其不是要倒mei了,也许你会说用事务和更新锁,那样的话,效率是不是会降低很多呀!
@长风之子: 可以放在同一个事务中处理
使用游标,怎么都不习惯用游标的呢?
declare @Account varchar(50)
update top(2) AppraiseGuild set [state]=1,@Account=isnull(@Account+',','')+isnull(Account,'') where [state]<>1
print @Account
declare @Account varchar(150) set @Account='' update top(2) AppraiseGuild set [state]=0,@Account=@Account+'分隔符'+Account where [state]<>1 print @Account
这样可以实现你的需求,但是你的要求和写法也听奇怪的。