2012-08-09 2 views
1

FTP를 통해 대용량 파일을 가져 오는 데는 하루에 한 번씩 처리하는 경우가 있습니다.이 파일에는 최신 버전의 데이터베이스 테이블 4 개가 포함되어 있습니다.두 SQL Server 테이블간에 diff를 효율적으로 적용하십시오.

각 테이블에 대해

, 내가 좋아하는 것까지 : 준비 데이터베이스에서

  1. 자르기 표는
  2. BCP FTP'd가 테이블에 준비 테이블 사이
  3. 찾기 차이점 (IUD)를 파일 이 테이블
을 준비 일치하도록 생산 표는
  • 생산 테이블에 필요한 IUDs 확인 0

    이것은 합리적으로 공통적 인 문제이지만, 최선의 접근 방법은 100 % 확신 할 수는 없습니다.

    이러한 종류의 문제에 대해 T-SQL 기능이 내장되어 있습니까? 아니면 삽입/업데이트/삭제 된 레코드를 찾아 수동으로 실행하기 위해 다양한 조인을해야합니까? 나는이 두 번째 방법으로 할 수 있다고 확신하지만, 모든 제안은 크게 (아무것도 작동하지 않는 코드를 찾고) none-the-less 감사합니다.

  • +1

    ['merge'] (http://technet.microsoft.com/en-us/library/bb510625.aspx)를보십시오. –

    답변

    1

    을 진정한 대답은 Mikael Eriksson이 언급 한 MERGE 명령이 적절한 방법임을 알았습니다. 에서

    MERGE dbo.DimProduct AS Target 
    USING (SELECT ProductID, ProductName, ProductColor, ProductCategory FROM dbo.StagingProduct) AS Source 
    ON (Target.ProductID = Source.ProductID) 
    WHEN MATCHED THEN 
        UPDATE SET Target.ProductName = Source.ProductName 
    WHEN NOT MATCHED BY TARGET THEN 
        INSERT (ProductID, ProductName, ProductColor, ProductCategory) 
        VALUES (Source.ProductID, Source.ProductName, Source.ProductColor, Source.ProductCategory) 
    OUTPUT $action, Inserted.*, Deleted.*; 
    

    :

    http://www.bidn.com/blogs/bretupdegraff/bidn-blog/239/using-the-new-tsql-merge-statement-with-sql-server-2008 나에게 도움이

    다음은 간단한 사용 예입니다.

    관련 문제