2012-04-11 2 views
0

나는 힘든 시간을 보내고있는 코드를 '상속했다'. 응용 프로그램에는 구성원 테이블로 구성원을 가져 오기위한 Excel 가져 오기 기능이 있으며 SqlBulkCopy이 사용됩니다.SQL Server 2005에서 유사한 데이터를 두 테이블로 대량 복사하는 방법?

몇 달 전에 junction 테이블이 추가되었으며 응용 프로그램이 제대로 작동하려면 구성원 테이블에있는 두 개의 속성을 추가해야합니다. 하드 커플 링이 없습니다 (PK, FK - 내 선택이 아닙니다!).

두 테이블로 대량 복사 할 수 없다는 사실을 알고 있기 때문에이 문제를 해결하는 방법을 모르겠습니다. 별도로 처리해야하기 때문입니다. 그러나 새로 가져온 멤버의 GUID 특성은 물론 다른 특성 값 (groupId)도 가장 좋은 방법으로 검색 할 수 있습니까 (성능에 미치는 영향은 낮음)?

예 :

엑셀 가져 오기 :

Name 
Email 
plus more 

표 1

name 
personID (GUID) 
groupID (same for all imported members) 
+ other attributes 

표 2

personID (GUID) 
groupID (same for all imported members) 
+ other 'new' attributes 

미안 코드이 시간을 제공 할 수 없습니다 :/누군가가 줄 수 있기를 정말로 바랍니다. 나 어떤 충고!

+0

네 말이 맞아 -이 작업을 수행 할 수 없습니다 대량 가져 오기는 하나의 테이블로 사용할 수 있습니다. 그래서 기본적으로 다음과 같이하십시오. (1) 데이터를 "스테이징"테이블로 대량 가져옵니다. 그런 다음 (2) 스테이징 테이블에서 해당 테이블을 두 개의 실제 테이블로 나눕니다. –

+0

어떻게 그 곳에서 GroupID를 얻습니까? 그리고 정확히 뭐하고 있니? "Excel 가져 오기"에서'Table1'에 삽입 한 다음 해당 테이블에서'Table2'에 삽입 할 데이터를 다시 가져와야합니까 ?? Excel에서 가져온 하나의 행에 대해 정확히 설명해 주시겠습니까? 모든 단계, 관련된 모든 데이터 ... –

답변

0

그것의 아주 명확하지 무엇 정확히 및이 두 테이블에 엑셀 가져 오기의 데이터를 저장하기 위해 노력하고, 그 groupID가 오는 곳 방법을 정확하게에서 .... 기본적으로

- 당신 ' re right - 여러 테이블에 일괄 삽입 할 수 없습니다. 그래서 필자는 다음과 같습니다

1)는 오늘로 Staging 테이블에 엑셀에서 대량 삽입 작업을 수행

2) 그런 다음 그 당신이 Table1에 저장해야 할 정보의 조각 및 출력 당신이 필요로 필요한 정보를 삽입 Table2의 비트 Table1의 비트를 "연결"하는 -의 라인을 따라 뭔가 : 그렇게하면서 당신의 Table1Staging의 행을 삽입합니다

DECLARE @Connection TABLE (GroupID INT, PersonID UNIQUEIDENTIFIER, EMail VARCHAR(500)) 

INSERT INTO dbo.Table1 (list of columns here) 
    OUTPUT Inserted.GroupID, Inserted.PersonID, Inserted.EMail 
     INTO @Connection(GroupID, PersonID, EMail) 
    SELECT 
     (list of columns here) 
    FROM 
     dbo.Staging 
    WHERE 
     (possibly a condition here???) 

을하고, 일부 정보 흐름을 기록합니다 각 행에 삽입 된 숫자 - GroupID, PersonIDEMail입니다. 이 정보를

은 또한 Table2으로 값을 삽입 할 수 있어야한다 :

INSERT INTO dbo.Table2 (GroupID, PersonID, EMail, list of other columns here) 
    SELECT 
     c.GroupID, c.PersonID, c.EMail, 
     (list of other columns from Staging table here) 
    FROM @Connection c 
    INNER JOIN dbo.Staging s ON c.EMail = s.EMail -- or use whatever you can use to 
                -- connect the two sets of data 
    WHERE (condition) ...... 
관련 문제