2012-03-14 9 views
1

파일에서 Microsoft SQL Server 데이터베이스로 데이터를 가져와야합니다.데이터베이스로 데이터 가져 오기

  • 파일 대략 (일관성 필드 수 있지만, 필요한 데이터의 모든 행 가능)
  • 파일이 600'000 레코드
  • 첫번째 필드는까지 포함 할 수 구조화는 레코드를 식별

데이터를 가져올 때 새 값으로 데이터베이스의 기존 레코드를 업데이트하거나 레코드를 찾을 수없는 경우 새 레코드를 삽입합니다.

이를 수행하는 가장 좋은 방법은 무엇입니까? 이 방법은 처리 시간의 몇 시간에 이르게 초당 35 개 기록, 주위를 처리하기 때문에

는 (내 .NET 응용 프로그램에서 SELECTUPDATE 또는 INSERT이 진정으로 나를 만족하지 않습니다 실행, 라인하여 파일 라인을 읽기 ...)

첫 번째 옵션은 저장 프로 시저에서 select 및 update/insert 명령을 결합하는 것이지만 여전히 많은 시간이 걸릴 수 있습니다.

같은 것이 있습니까? INSERT ... ON DUPLICATE UPDATE?

레코드 (여러 열)의 목록/배열을 저장 프로 시저에 전달할 수 있습니까?

예인 경우 어떻게 구현 되나요?

은 SSIS가 정확히 그렇게 만들어진 당신의 도움 :)

+0

[SQL Server BULK INSERT] (http://msdn.microsoft.com/en-us/library/ms188365.aspx)를 봐야 대량로드가 가능합니다. SQL Server의 준비 테이블에 파일. 스테이징 테이블에 데이터를로드하면 중복을 감지하고 제거하여 "실제"데이터 테이블에 데이터를 채울 수 있습니다. –

+0

어떻게 대상 데이터 테이블에 데이터를 채우기 위해 중복을 감지하고 제거하겠습니까? 앞에서 설명한 것처럼 중복은'UPDATE' 문으로, 나머지는'INSERT' 문으로 처리되어야합니다. – Nicholas

+1

감사합니다. 병합은 제가 찾고 있던 것이 었습니다. 이 플래그를 승인 된 플래그로 추가 할 수 있습니다. – Nicholas

답변

1

SQL Server의 준비 테이블에 파일을 대량로드하려면 SQL Server BULK INSERT을 확인해야합니다.

일단 스테이징 테이블에 데이터를로드 한 다음 SQL Server 2008 MERGE 문을 사용하여 실제 데이터 테이블을 삽입/업데이트 ("upsert") 할 수 있습니다. 그게 정확히 그것은 해결하기 위해 설계된 시나리오입니다 ...

0

주셔서 감사합니다. Here이 그 예입니다.

+0

아직 SSIS에서 근무하지 않았습니다. 가져 오기는 사용자 상호 작용없이 자동으로 실행되어야하며 개발 환경에 의존하지 않아야합니다. SSIS의 가능성은 무엇입니까? – Nicholas

+0

패키지를 두 번 이상 실행해야하는 경우 패키지를 빌드하고 예약 작업에 추가하십시오. 나는 당신이 시도 해보라고 권하고, 그것은 아주 좋은 기술이다. – Diego

관련 문제