我这里有两个表:我有个线程要把表B中字段c为0的数据添加到表A中,然后把表B的字段c更新为1
这个是我添加用的sql语句insert into A(A,B) select top 100 a,b from B where c=0
然后更新的时候我怎么更新啊,怎样才能只更新这一批添加到A表中的B表记录的c字段?
有人说直接update B set c=1,但是这样做的话,我在执行insert操作时,B表来了新数据会把这些还没有添加A表的新数据同时更新掉,会造成A表的数据不全。
请各位帮帮忙,给个解决方法,怎样才能完美的将B表的数据添加到A表。既不能重复又不能缺失数据能?
PS:我之前是先查询一批c=0的数据添加到A表,然后更新B的c为1,分为了3步,数据是能够全部不重复添加A表,但是客户反映效率慢,所以这种方法就不要说了。
先在这里谢谢了
这个是我添加用的sql语句insert into A(A,B) select top 100 a,b from B where c=0
然后更新的时候我怎么更新啊,怎样才能只更新这一批添加到A表中的B表记录的c字段?
有人说直接update B set c=1,但是这样做的话,我在执行insert操作时,B表来了新数据会把这些还没有添加A表的新数据同时更新掉,会造成A表的数据不全。
请各位帮帮忙,给个解决方法,怎样才能完美的将B表的数据添加到A表。既不能重复又不能缺失数据能?
PS:我之前是先查询一批c=0的数据添加到A表,然后更新B的c为1,分为了3步,数据是能够全部不重复添加A表,但是客户反映效率慢,所以这种方法就不要说了。
先在这里谢谢了
解决方案 »
- JAVA热部署问题
- struts2 xml中 执行一个action里的多个action方法?
- 一运行界面报404错误希望大家给处理一下
- hibernate 懒加载简单属性
- hibernate异常
- 继承DispatchAction的问题
- 问几个简单的java问题
- hibernate中有没类似jdbc的get(0)的功能
- 用appfuse中middlegen从数据库生成pojo老是报错,跪求解答!!!!
- 在哪可以下载PetStore源程序和相关的文档
- 初学servlet 看了韩顺平的视频, 写了简单用户登录的代码,继承了Httpservlet ,发现不能进行页面跳转,各位大神看看,小弟没分,真心求助
- Struts2中360下载文件问题
update B set c=1 where c = 0
把上面两个作为一个事务提交
不会产生这种情况的:在执行insert操作时,B表来了新数据会把这些还没有添加A表的新数据同时更新掉,会造成A表的数据不全,因为是先将数据拷贝到A表的。
begin tran-- 建立临时表
create table #tmp(id int,A varchar(255),B varchar(255))
-- 插入临时表
insert into #tmp select top 1000 A,B from 表B where C=0
if @@error<>0
begin
rollback tran
return
end -- 更改已插入数据标记
update 表B set 表B.C = 1 from #tmp where 表B.id = #tmp.id
if @@error<>0
begin
rollback tran
return
end -- 可以对临时数据进一步处理-- 转移数据
insert into 表A(A,B) select A,B from #tmp
drop table #tmpcommit tran手打的 没测试
自己纠一下错
conn.setAutoCommit(false);
QueryRunner qr = new QueryRunner(); // QueryRunner qr = new QueryRunner(abbottDataSource);
int insertRows = 0;
int updateRows = 0;
try {
insertRows = qr.update(conn, sql);//insert操作
updateRows = qr.update(conn, updateSQL);//update操作
conn.commit();
// result = qr.update(sql);
} catch (Exception e) {
conn.rollback();
throw new Exception("推送MO出错 sql=" + sql, e);
} finally {
conn.setAutoCommit(true);
try {
conn.close();
} catch (Exception e) {
// ignore
}
}程序中我是这样处理的,也不知道是否正确