2017-09-21 1 views
0

.csv에서 MS SQL 데이터베이스로 데이터를 삽입하려고합니다. 나는 이런 식으로 작업을 수행합니다BULK INSERT from CSV, strings with ""

id,email,firstname,lastname,city,address,phone,birthday,candidateurl,createdAt 

을 같은 예를 들어 :

BULK INSERT [dbo].[prescreen_candidateData] FROM '\\server2\prescreen$\candidateData.csv' WITH (
FIRSTROW = 2, 
FIELDTERMINATOR = '\,', 
ROWTERMINATOR = '\n', 
KEEPNULLS 
); 

내 .CSV이 식으로 구축 할 수 있습니다 :

CREATE TABLE [dbo].[prescreen_candidateData](
[id] [varchar](50) DEFAULT '', 
[email] [varchar](50) DEFAULT '', 
[firstname] [varchar](50) DEFAULT '', 
[lastname] [varchar](50) DEFAULT '', 
[city] [varchar](50) DEFAULT '', 
[address] [varchar](50) DEFAULT '', 
[phone] [varchar](50) DEFAULT '', 
[birthday] [varchar](50) DEFAULT '', 
[candidateurl] [varchar](50) DEFAULT '', 
[createdAt] [varchar](50) DEFAULT '') ON [PRIMARY] 

창조 테이블 후, 내가 좋아하는 삽입하려고 :

58282,[email protected],Michael,Meier,,"""Street Nr 12,08159,City""",,"1996-08-29 00:00:00",https://linktoemployee, 2016-05-12 

예를 들어, 도시 비어있는, 내 csv에서 그것은 좋아 보인다. 그러나 문제는 adressfield이다. 왜냐하면 adressfield에 포함되어 있기 때문이다. 그러나 the는 종결 자다. .. 내가 어떻게 그것을 할 수 있냐, 그것은 대량 삽입물에서이다. ""사이에 무시됩니다?

편집 : 이 ** 내가 ... csv로에 연결된 서버를 작성하여 그것을 해결 내가 **

+0

나는 당신의 문제에 대한 답이 없지만, 'ROWTERMINATOR = '\ n''이 SQL 서버에 의해 무시되는 대신에'ROWTERMINATOR ='\ r \ n''이 [used] 될 것입니다 (https://docs.microsoft.com/en-us/). sql-server/sql-relational-databases/import-export/specify-field-and-row-terminators-sql-server) 항상 작동하지는 않지만 항상 작동합니다. 'ROWTERMINATOR = '0x0a'. – HoneyBadger

+0

시도; fieldterminator를 위해. 내가 아는 한, 사용법을 능가한다. fieldterminator로 기본적으로. –

+0

나는 내 FTP에서 외부 서비스로부터이 CSV를 얻는다. 나는 그들과 이야기하려고 노력한다. 그러나 나는 쉼표가 SQL의 기본 종결 자라고 생각한다 ... –

답변

2

당신은 당신이 업로드하는 데이터를 설명하는 서식 파일을 사용해야 원하는대로 일했다. 서식 파일을 사용하면 데이터의 개별 열에 구분 기호를 지정할 수 있습니다. (이 파일의 끝에 새 줄을 필요가 있습니다하거나 오류가 발생하지)과 같은 형식의 파일을 작성하여 시나리오의

BULK INSERT [dbo].[prescreen_candidateData] FROM '\\server2\prescreen$\candidateData.csv' 
WITH (
FORMATFILE='\\server2\prescreen$\YourFormat.fmt' 
); 

: 당신은 당신의 쿼리 형식의 파일을 참조해야합니다

9.0 
10 
1  SQLCHAR  0  50  ","  1  id   "" 
2  SQLCHAR  0  50  ","  2  email   SQL_Latin1_General_CP1_CI_AS 
3  SQLCHAR  0  50  ","  3  firstname   SQL_Latin1_General_CP1_CI_AS 
4  SQLCHAR  0  50  "," 4  lastname   SQL_Latin1_General_CP1_CI_AS 
5  SQLCHAR  0  50  ",\"\"\"" 5  city   SQL_Latin1_General_CP1_CI_AS 
6  SQLCHAR  0  50  "\"\"\"," 6  address   SQL_Latin1_General_CP1_CI_AS 
7  SQLCHAR  0  50  ",\"" 7  phone   SQL_Latin1_General_CP1_CI_AS 
8  SQLCHAR  0  50  "\"," 8  birthday   SQL_Latin1_General_CP1_CI_AS 
9  SQLCHAR  0  50  "," 9  candidateurl   SQL_Latin1_General_CP1_CI_AS 
10  SQLCHAR  0  50  "\r\n" 10  createdAt   SQL_Latin1_General_CP1_CI_AS 

아래 이미지는 다양한 필드의 역할을 설명합니다.

enter image description here

당신은 형식 파일은 당신이 당신의 각 필드의 종결을 지정할 수 있음을 알 수 있습니다. 또한 City (", \"\ "\")에 대한 구분 기호로 3 개의 따옴표가 오는 쉼표를 지정했음을 알 수 있습니다. 마찬가지로 주소 필드에 쉼표 (\ "\"\ ",)가 오는 3 개의 따옴표로 된 구분 기호를 지정 했으므로 도시 및 주소 구분 기호 내의 모든 항목은 ','을 포함하여 함께 업로드됩니다. 터미네이터 당신은 당신의 데이터를 업로드 따옴표를 피하기 그리고 그것은 또한 당신이 당신의 데이터 업로드 내에서 쉼표 ','가질 수 있습니다.

More info

+0

고마워, 나는 csv에 연결된 서버를 만들어서 해결했다. –