我有两个表,表1是T_MeterOrigValue,每个小时会新存入6000条数据,表2是备份表T_MeterOrigValue_bak,我是每个小时定时将表1中的数据处理完后转存到表2,然后删除表1中的数据(这里不能用truncate或者全部删除)。现在我的删除语句如下:delete from T_MeterOrigValue
where F_OrigValueID in (select F_OrigValueID from T_MeterOrigValue_bak);表2 T_MeterOrigValue_bak 中的数据量非常大,有上千万条,F_OrigValueID为主键。请问这样的删除语句怎么写比较好?
where F_OrigValueID in (select F_OrigValueID from T_MeterOrigValue_bak);表2 T_MeterOrigValue_bak 中的数据量非常大,有上千万条,F_OrigValueID为主键。请问这样的删除语句怎么写比较好?
里面检查是否出错,主要是防止重复插入数据,因为有时候有这个可能。
--...数据处理过程
begin transaction -- 开始事务
insert into T_MeterOrigValue_bak
select *
from T_MeterOrigValue
where (F_OrigValueID like '350100A100%' or F_OrigErrCode<>'A');
IF @@ERROR <> 0
rollback transaction -- 如果插入出错,回滚事务
else
commit transaction; -- 插入成功,提交事务
delete from T_MeterOrigValue
where F_OrigValueID in (select F_OrigValueID from T_MeterOrigValue_bak);
--封装到,try catch里面
begin try
begin tran
insert into T_MeterOrigValue_bak
select *
from T_MeterOrigValue
where (F_OrigValueID like '350100A100%' or F_OrigErrCode<>'A');
commit tran
end try
begin catch
select error_number()
rollback tran
end catch
--没有在查询分析器里写..直接在这写了..大致就这个思路