首页 新闻 赞助 找找看

sql 2008中,update时的赋值问题?

0
悬赏园豆:5 [待解决问题]

在sql2008里:
declare @Account varchar(50)
update top(2) AppraiseGuild set [state]=1,@Account=Account where [state]<>1
print @Account
这个语句是可以执行的
但是变量@Account  只能得到最后一个更新的值,而拿不到两条的值!
我们怎么样能拿到全部被更新的值呢?

长风之子的主页 长风之子 | 初学一级 | 园豆:184
提问于:2012-04-19 11:10
< >
分享
所有回答(7)
0

范围限定对着吗?

wvsy | 园豆:297 (菜鸟二级) | 2012-04-19 11:15

????没明白你是啥意思

支持(0) 反对(0) 长风之子 | 园豆:184 (初学一级) | 2012-04-19 11:25

@长风之子: 就是你where后面的对着?

支持(0) 反对(0) wvsy | 园豆:297 (菜鸟二级) | 2012-04-21 10:26

@wvsy: 查询条件没问题!

支持(0) 反对(0) 长风之子 | 园豆:184 (初学一级) | 2012-05-02 18:19
0

呵呵,这个等于update  AppraiseGuild set [state]=1,@Account=Account where [state]<>1
print @Account  

Halower | 园豆:1723 (小虾三级) | 2012-04-19 14:03

NO,我的更新前面是有top(2)的,也就是更新两条,你写的这个语句只是更新一条,操作结果也是不一样的!

支持(0) 反对(0) 长风之子 | 园豆:184 (初学一级) | 2012-04-19 14:42
0

先将Account的值SELECT出来,然后再更新

dudu | 园豆:31075 (高人七级) | 2012-04-19 14:04

这样会存在并发问题,如果有两个用户同事操作,第一个用户select以后,准备去update,这时候第二个用户进来了,他也select了一下,和第一个用户得到的结果是一样的,这时候第一个用户在第二个用户select之后进行了一步update操作,那么第二个用户再去update的时候,他select出来的值和他update的值是不一样的,那第二个用户其不是要倒mei了,也许你会说用事务和更新锁,那样的话,效率是不是会降低很多呀!

支持(0) 反对(0) 长风之子 | 园豆:184 (初学一级) | 2012-04-19 14:46

@长风之子: 可以放在同一个事务中处理

支持(0) 反对(0) dudu | 园豆:31075 (高人七级) | 2012-04-19 15:43
0

使用游标,怎么都不习惯用游标的呢?

轻狂の书生 | 园豆:1042 (小虾三级) | 2012-04-19 16:47
0

declare @Account varchar(50)
update top(2) AppraiseGuild set [state]=1,@Account=isnull(@Account+',','')+isnull(Account,'') where [state]<>1
print @Account

Chao Hong | 园豆:244 (菜鸟二级) | 2012-04-19 18:06
0
邀月 | 园豆:25475 (高人七级) | 2012-04-19 20:58
0
declare @Account varchar(150)
set @Account=''
update top(2) AppraiseGuild set [state]=0,@Account=@Account+'分隔符'+Account where [state]<>1
print @Account

这样可以实现你的需求,但是你的要求和写法也听奇怪的。
小材小用 | 园豆:639 (小虾三级) | 2012-04-22 21:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册