update 操作只更新表中的10条数据。
少于10条的返回失败。
关键有个并发让我不好处理。
本来我想到的sql:
update top (xx) Table set a='xxxx';
但是当数据库记录少于xx条的时候这条sql还是能执行成功。
但是业务上是不允许成功的。
求各位大神不吝赐教。
加个条件大于10条就行了
update table set a='xx' where (select count(*))>10
select count(*) 这个里面具体是什么条件?还是我自己的业务条件?
比如学生表,字段 性别,年级
我现在要把学生表里面抽取十个人从二年级升到三年级.(如果学生表里人数达不到10个,就不做操作)
update 学生表 set 年纪='三年级' where (?????????)>10
问号里怎么写能达到我的业务需求
@graymaster:
where 后跟的是一个子查询 如 where (里面写你的业务查询语句) >10,Count函数只是一个统计函数,可以用列名也可以用*
@Zery:
update 学生表 set 年纪='三年级' where (select count(*) from 学生表 where 性别='男' and 年级='二年级')>10
性别男抽取10个从二年级升级到三年级,这个sql好像实现不了。
我有点明白你的意思了。
update 学生表 set 年纪='三年级' where 性别='男' and 年级='二年级'
and (select count(*) from 学生表 where 性别='男' and 年级='二年级')>10
业务条件写两遍,一个用在更新条件,一个用来保证记录数达标
还有一个方法就是开启一个事务,执行完Update后,查看一下影响的行数,如果小于10行,就rollback事务,否则就commit。这样应该也能解决这个问题。
使用事务最好,写到存储过程里面去,建议优先判断 Table中的数据量,不符合更新条件直接返回,不建议使用rollback。
BEGIN TRAN UPDATE TOP(XX) TABLENAME SET ... WHERE IF @@ROWCOUNT >10 COMMIT TRAN ELSE ROLLBACK TRAN
用事务比较方便