首页 新闻 会员 周边

update 更新指定x条记录,没有x条不更新。

0
[已解决问题] 解决于 2014-01-20 14:10

update 操作只更新表中的10条数据。

少于10条的返回失败。

关键有个并发让我不好处理。

 

本来我想到的sql:

update top (xx) Table set a='xxxx';

 

但是当数据库记录少于xx条的时候这条sql还是能执行成功。

但是业务上是不允许成功的。

求各位大神不吝赐教。

sql
graymaster的主页 graymaster | 初学一级 | 园豆:7
提问于:2013-12-20 04:56
< >
分享
最佳答案
0

加个条件大于10条就行了

update table set a='xx' where (select count(*))>10

奖励园豆:5
Zery | 大侠五级 |园豆:6151 | 2013-12-20 07:23

select count(*) 这个里面具体是什么条件?还是我自己的业务条件?

比如学生表,字段 性别,年级

我现在要把学生表里面抽取十个人从二年级升到三年级.(如果学生表里人数达不到10个,就不做操作)

update 学生表 set 年纪='三年级' where (?????????)>10

问号里怎么写能达到我的业务需求

graymaster | 园豆:7 (初学一级) | 2013-12-20 07:28

@graymaster: 

where  后跟的是一个子查询 如 where (里面写你的业务查询语句) >10,Count函数只是一个统计函数,可以用列名也可以用* 

Zery | 园豆:6151 (大侠五级) | 2013-12-20 07:32

@Zery: 

update 学生表 set 年纪='三年级' where (select count(*) from 学生表 where 性别='男' and 年级='二年级')>10

性别男抽取10个从二年级升级到三年级,这个sql好像实现不了。

我有点明白你的意思了。

update 学生表 set 年纪='三年级' where 性别='男' and 年级='二年级'

and (select count(*) from 学生表 where 性别='男' and 年级='二年级')>10 

 

业务条件写两遍,一个用在更新条件,一个用来保证记录数达标

graymaster | 园豆:7 (初学一级) | 2013-12-20 07:37
其他回答(3)
0

还有一个方法就是开启一个事务,执行完Update后,查看一下影响的行数,如果小于10行,就rollback事务,否则就commit。这样应该也能解决这个问题。

ocean | 园豆:824 (小虾三级) | 2013-12-20 08:53
0

 使用事务最好,写到存储过程里面去,建议优先判断 Table中的数据量,不符合更新条件直接返回,不建议使用rollback。

袁家小黑球 | 园豆:1045 (小虾三级) | 2013-12-20 10:02
0
BEGIN TRAN
UPDATE TOP(XX) TABLENAME SET ... WHERE
IF @@ROWCOUNT >10
    COMMIT TRAN
ELSE ROLLBACK TRAN

用事务比较方便

鳳梨酥 | 园豆:287 (菜鸟二级) | 2013-12-20 12:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册