SQL復制一個表的數據到另一個表


最近做一個項目,由於客戶數據量大,為了不將數據徹底刪除,於是將數據移動到歷史表,原始表的數據刪除。由於技術有限,想不到好的方法,於是寫個存儲過程

執行,為了防止執行過程中出現異常,執行不完整。用到hIbernate事務。下面是寫的代碼。sql存儲過程寫的很麻煩,希望能給點建議:

 

CREATE PROCEDURE [dbo].[savetohistoryDel] 
    --時間
    @fromtime varchar(20)
AS
BEGIN 
--插入作業到歷史表
INSERT INTO inout_history_job
(
    jobid,jobtype,status,in_out_type,jobpos,invoicetype,isaccount,priority
    ,createtime,readtime,finishtime,shiftid,warehouseid,snumber,traycode
    ,route,op_man_id,taskid,scargo_wharea_id,scargo_space_id,scargo_alley_id
    ,tcargo_wharea_id,tcargo_space_id,tcargo_alley_id,jobcategory,isyfj
    ,isseq,indate,on_line_type,oldspacestatus,injobid,isfangfj,checkstatus
)
SELECT
    jobid,jobtype,status,in_out_type,jobpos,invoicetype,isaccount,priority
    ,createtime,readtime,finishtime,shiftid,warehouseid,snumber,traycode
    ,route,op_man_id,taskid,scargo_wharea_id,scargo_space_id,scargo_alley_id
    ,tcargo_wharea_id,tcargo_space_id,tcargo_alley_id,jobcategory,isyfj
    ,isseq,indate,on_line_type,oldspacestatus,injobid,isfangfj,checkstatus
FROM
    inout_job
    WHERE createtime < @fromtime
--插入作業詳細到歷史表
INSERT INTO inout_history_jobdetail
(
    jobdetailid,linestatus,jobid,inventoryid,productid,packid,lotid,punit
    ,jobnum,assignnum,customerid,invoiceid,invoicedetailid,boxcode,boxnumber
    ,productcode,isinvoice,injobdetailid,reserve1,reserve2,ownerId,lotatt1
    ,lotatt2,lotatt3,lotatt4,lotatt5,lotatt6,lotatt7,lotatt8,lotatt9,lotatt10
    ,lotatt11,lotatt12,isfj,checklot,op_man_id,scantime,isneed,ifboxcount,productstatus
    ,checkstatus,checktime,checkwho,reviewnum,mp
)
SELECT
    jobdel.jobdetailid,jobdel.linestatus,jobdel.jobid,jobdel.inventoryid,jobdel.productid,jobdel.packid,jobdel.lotid,jobdel.punit
    ,jobdel.jobnum,assignnum,jobdel.customerid,jobdel.invoiceid,jobdel.invoicedetailid,jobdel.boxcode,jobdel.boxnumber
    ,jobdel.productcode,jobdel.isinvoice,jobdel.injobdetailid,jobdel.reserve1,jobdel.reserve2,jobdel.ownerId,jobdel.lotatt1
    ,jobdel.lotatt2,jobdel.lotatt3,jobdel.lotatt4,jobdel.lotatt5,jobdel.lotatt6,jobdel.lotatt7,jobdel.lotatt8,jobdel.lotatt9,jobdel.lotatt10
    ,jobdel.lotatt11,jobdel.lotatt12,jobdel.isfj,jobdel.checklot,jobdel.op_man_id,jobdel.scantime,jobdel.isneed,jobdel.ifboxcount,jobdel.productstatus
    ,jobdel.checkstatus,jobdel.checktime,jobdel.checkwho,jobdel.reviewnum,jobdel.mp
FROM
    inout_jobdetail jobdel,inout_job job
    WHERE job.jobid=jobdel.jobid and job.createtime < @fromtime
--刪除作業和作業詳細
delete jobdel from inout_jobdetail jobdel,inout_job job
    WHERE job.jobid=jobdel.jobid and job.createtime < @fromtime
delete inout_job where createtime < @fromtime

--插入入庫單到歷史表
INSERT INTO inbound_history_invoice_header
(
    instockid,warehouseid,invoicedate,createtime,createmanid,instatus,intype,opmode,uploadflag
    ,auditmanid,auditdate,confirmanid,confirmdate,departid,shiftid,on_line_type,inpos,invoicesource,customerid
)
SELECT
   instockid,warehouseid,invoicedate,createtime,createmanid,instatus,intype,opmode,uploadflag
    ,auditmanid,auditdate,confirmanid,confirmdate,departid,shiftid,on_line_type,inpos,invoicesource,customerid
FROM
    inbound_invoice_header
    WHERE createtime < @fromtime
    
--插入入庫單詳細到歷史表
INSERT INTO inbound_history_invoice_detail
(
    instockdetailid,instockid,productid,packid,eunit,boxnum,plattenum,invoicenum,puboxnum
    ,puplattenum,pucnum,lotid,reserve1,reserve2,providerid,linestatus,lotatt1,lotatt2,lotatt3,lotatt4,
    lotatt5,lotatt6,lotatt7,lotatt8,lotatt9,lotatt10,lotatt11,lotatt12,checklot,isdown
)
SELECT
    indel.instockdetailid,indel.instockid,indel.productid,indel.packid,indel.eunit,indel.boxnum,indel.plattenum,indel.invoicenum,indel.puboxnum
    ,indel.puplattenum,indel.pucnum,indel.lotid,indel.reserve1,indel.reserve2,indel.providerid,indel.linestatus,indel.lotatt1,indel.lotatt2,indel.lotatt3,indel.lotatt4,
    indel.lotatt5,indel.lotatt6,indel.lotatt7,indel.lotatt8,indel.lotatt9,indel.lotatt10,indel.lotatt11,indel.lotatt12,indel.checklot,indel.isdown
FROM
    inbound_invoice_detail indel,inbound_invoice_header inheader
    WHERE inheader.instockid=indel.instockid and inheader.createtime < @fromtime
--刪除入庫單詳細和入庫單
delete indel from inbound_invoice_detail indel,inbound_invoice_header inheader
    WHERE inheader.instockid=indel.instockid and inheader.createtime < @fromtime
delete inbound_invoice_header where createtime < @fromtime
--插入出庫單到歷史表
INSERT INTO outbound_history_invoice_header
(
   outstockid,outstatus,outtype,departid,warehouseid,warehousemanid,createtime,createmanid,formdate
  ,outpos,vehicleno,vehiclepos,auditmanid,auditdate,confirmanid,confirmdate,opmanid,shiftid,saleno
  ,on_line_type,isupload,ownerid,sendplatform,setposition,shipmentstarttime,shipmentendtime,customerid
  ,isfbup,accountyear
)
SELECT
   outstockid,outstatus,outtype,departid,warehouseid,warehousemanid,createtime,createmanid,formdate
  ,outpos,vehicleno,vehiclepos,auditmanid,auditdate,confirmanid,confirmdate,opmanid,shiftid,saleno
  ,on_line_type,isupload,ownerid,sendplatform,setposition,shipmentstarttime,shipmentendtime,customerid
  ,isfbup,accountyear
FROM
    outbound_invoice_header
    WHERE createtime < @fromtime
    
--插入出庫單詳細到歷史表
INSERT INTO outbound_history_invoice_detail
(
   outstockdetailid,outstockid,productid,lotid,cargo_space_id,cargo_alley_id,wh_area_id,packid,pkgunit
  ,invoicenum,boxnum,assignnum,assignboxnum,sendnum,sendboxnum,customid,fbFlag,traycode,reserve1,reserve2
  ,confirmanid,confirmdate,linestatus,lotatt1,lotatt2,lotatt3,lotatt4,lotatt5,lotatt6,lotatt7,lotatt8
  ,lotatt9,lotatt10,lotatt11,lotatt12
)
SELECT
  outdel.outstockdetailid,outdel.outstockid,outdel.productid,outdel.lotid,outdel.cargo_space_id,outdel.cargo_alley_id,outdel.wh_area_id,outdel.packid,outdel.pkgunit
  ,outdel.invoicenum,boxnum,outdel.assignnum,outdel.assignboxnum,outdel.sendnum,outdel.sendboxnum,outdel.customid,outdel.fbFlag,outdel.traycode,outdel.reserve1,outdel.reserve2
  ,outdel.confirmanid,outdel.confirmdate,outdel.linestatus,outdel.lotatt1,outdel.lotatt2,outdel.lotatt3,outdel.lotatt4,outdel.lotatt5,outdel.lotatt6,outdel.lotatt7,outdel.lotatt8
  ,outdel.lotatt9,outdel.lotatt10,outdel.lotatt11,outdel.lotatt12
FROM
    outbound_invoice_detail outdel,outbound_invoice_header outheader
    WHERE outheader.outstockid=outdel.outstockid and outheader.createtime < @fromtime
--刪除出庫單詳細和出庫單
delete outdel from outbound_invoice_detail outdel,outbound_invoice_header outheader
   WHERE outheader.outstockid=outdel.outstockid and outheader.createtime < @fromtime
delete outbound_invoice_header where createtime < @fromtime
END
    public void saveHistoryTabAndDelete(String time) throws Exception {
          Session session = null;
          Transaction tx = null;
          try {
            session = m_dao.getSession();
            tx = session.beginTransaction();
            SQLQuery query = session.createSQLQuery("{call savetohistoryDel(?)}");
            query.setString(0, time);
            query.executeUpdate();
            tx.commit();
        } catch (Exception e) {
            tx.rollback();
            e.printStackTrace();
        }finally{
            m_dao.closeSession(session);
        }        
    }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM