我有两个表,表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为主键。请问这样的删除语句怎么写比较好?

解决方案 »

  1.   

    其实是一个存储过程,大概如下,请问怎样写比较好?
    里面检查是否出错,主要是防止重复插入数据,因为有时候有这个可能。

            --...数据处理过程
            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);
      

  2.   


    --封装到,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
    --没有在查询分析器里写..直接在这写了..大致就这个思路