2013-07-10 2 views
0

각각 1 개의 lac 레코드를 포함하는 3 개의 텍스트 파일을 test1 테이블에 일괄 삽입합니다.SQL Server 2005에 대량 삽입

3 개의 파일에는 각각 회사 코드와 Folio가 있습니다. compcode와 folio가 이미 test1 테이블에 존재한다면, 그 특정 레코드를 텍스트 파일에서 테이블로 업데이트해야합니다.

하지만 내 쿼리에 많은 시간이 걸립니다. test1 표 70 개 컬럼

을 갖는다

MMY 로직 : 더미 테이블

    1. 수입 데이터가 있기 때문에 TEST1 테이블
    2. if exists (select * from #dummy , test1 where condition) 
      begin 
          update test1 
          set col = (#dummy.col).. 
          inner join #dummy on (condition) 
      end 
      
    3. else insert 
      

    와 더미의 각 행과 비교 기록은 lacs에 30 분 이상 걸립니다 .. 어떻게 할 수 있습니까? 쿼리 증명해?

  • +0

    당신이 비교 어때요 test1 테이블과 더미 테이블의 행? –

    +0

    조건 = # dummy.companycode + # dummy.folio = test1.companycode + test1.folio –

    답변

    0

    임시 테이블에 데이터를 삽입하는 데 BULK INSERT를 사용하고 있거나 SQL Server에서 가져 오기 마법사를 사용하여 가져올 수 있다고 가정합니다. 그 후에는 아래 쿼리를 사용할 수 있습니다.

    if(exist)이더라도 두 테이블에있는 행만 업데이트됩니다. 그래서 다른 경우 제거하고 아래 그림과 같이 직접 쿼리를 작성 :

    update test1 
    set col = (#dummy.col).. 
    from test1 
    inner join #dummy on (test1.companycode =#dummy.companycode and test1.folio = #dummy.companycode) 
    

    을 TEST1에서 종료, 당신은 왼쪽 사용에 가입 할 수없는 기록을 삽입하기 위해 아래와 같이

    Insert into test1 
    select column names 
    from 
    #dummy left join test1 
    on test1.companycode =#dummy.companycode and test1.folio = #dummy.companycode 
    where test1.companycode is null 
    and test1.folio is null 
    
    +0

    nil 나는 해결책을 테스트하고 abt에 시간도 알려줄 것입니다. –

    +0

    이전과 같은 시간이 걸리지 않습니다. 첫 번째 파일을 가져 왔습니다. 빨리 삽입했지만 2 만 건의 레코드가있는 두 번째 파일에는 무한한 시간이 걸렸습니다. 45 분이 지나면 작업이 취소됩니다.이 업데이트와 삽입에 대한 다른 논리가 있습니다. –

    관련 문제