2014-10-16 8 views
1

나는 다음과 같은 테이블 (질문에 대한 단순화 된)이 있습니다가져 오기 한 csv 파일

데이터 :

Id 
Serialnumber 
Value 
AddressId (ForeignKey) 

주소 : 이제

Id 
Street 
ZipCode 
City 
... 

을 불행히도 두 테이블 모두에 대해 데이터가 포함 된 CSV 파일이 있습니다.

Serialnumber,Value,Street,ZipCode,City, ... 
12345,1140,Fakestreet 3,12345,New York 
5678,830,Fakestreet 87,12345,New York 

Microsoft SQL Server (2008)와 같은 CSV 파일을 가져올 방법이 있습니까? 서버 자체가 주소를 먼저 삽입 한 다음 주소 테이블의 기본 키를 데이터 테이블의 외래 키로 사용하십시오.

+0

SQL Server 가져 오기 마법사를 사용하여 준비 테이블에서 SQL Server로 먼저 데이터를 가져온 다음 t-sql 쿼리를 작성하여 최종 대상 테이블에 데이터를 삽입합니다. –

답변

0
  1. 공간이 있으면 전체 CSV를 준비 테이블로 가져온 다음 SQL 문을 사용하여 대상 테이블에 삽입합니다. 준비 테이블은 #temp 테이블이거나 준비를 위해 특별히 만들어진 별도의 데이터베이스 일 수 있습니다.
  2. 그렇지 않으면 모든 필드가있는 더미 테이블을 설정하고 CSV에서 더미 테이블로 INSERT를 정의 할 수 있습니다. 그런 다음 dummy 테이블 대신 실제 대상 테이블에 삽입하는 INSTEAD 트리거를 사용하십시오. 트리거는 동일한 일괄 처리에서 여러 삽입을 수신하므로 여러 삽입을 처리해야합니다. 따라서 주소 기본 키를 @table 변수로 캡처하십시오.
1

CSV 파일을 아래의 준비 테이블로 가져온 다음 적절하게 처리해야합니다.

IF (OBJECT_ID('StagingData') IS NULL) 
    CREATE TABLE StagingData 
    ( 
     SerialNumber int, 
     Value int, 
     Street varchar(256), 
     ZipCode int, 
     City varchar(256) 

    ) 

TRUNCATE table StagingData 

BULK 
INSERT StagingData 
FROM 'c:\csvtest.txt' 
WITH 
(
FIRSTROW = 2, 
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 
GO