Masseneinsatz mit Textqualifizierer in SQL server

Ich versuche, bulk insert wenige datasätze in einem Tabelle Test aus einer CSV-file,

  CREATE TABLE Level2_import (wkt varchar(max), area VARCHAR(40), ) BULK INSERT level2_import FROM 'D:\test.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) )  CREATE TABLE Level2_import (wkt varchar(max), area VARCHAR(40), ) BULK INSERT level2_import FROM 'D:\test.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) (  CREATE TABLE Level2_import (wkt varchar(max), area VARCHAR(40), ) BULK INSERT level2_import FROM 'D:\test.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) FIRSTROW = 2,  CREATE TABLE Level2_import (wkt varchar(max), area VARCHAR(40), ) BULK INSERT level2_import FROM 'D:\test.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) 

Der Bulk-Insert-Code sollte die erste Zeile beheben und die data in die Tabelle insert. Es wird die erste Zeile los, wird aber im Trennzeichen verwirrt. Die erste Spalte ist wkt und der Spaltenwert ist doppelt zitiert und hat Komma innerhalb des Wertes.

Also ich denke, ich Frage ist, wenn es eine Möglichkeit, die BULK INSERT dass die doppelte zitierte Teil ist eine Spalte unabhängig von der Komma in ihm zu erzählen?

die CSV-file sieht so aus,

  "MULTIPOLYGON (((60851.286135090661 510590.66974495345,60696.086128673756 510580.56976811233,60614.7860844061 510579.36978015327,60551.486015895614)))", 123123.22 

Sie müssen eine "Formatdatei" verwenden, um einen Textqualifikator für Bulk-Insert zu implementieren. Im Wesentlichen müssen Sie die Bulk-Insert, dass es potenziell verschiedene Begrenzer in jedem Bereich zu lehren.

Erstellen Sie eine Textdatei namens "level_2.fmt" und speichern Sie sie.

 11.0 2 1 SQLCHAR 0 8000 "\"," 1 wkt SQL_Latin1_General_CP1_CI_AS 2 SQLCHAR 0 40 "\r\n" 2 area SQL_Latin1_General_CP1_CI_AS 11.0 11.0 2 1 SQLCHAR 0 8000 "\"," 1 wkt SQL_Latin1_General_CP1_CI_AS 2 SQLCHAR 0 40 "\r\n" 2 area SQL_Latin1_General_CP1_CI_AS 2 11.0 2 1 SQLCHAR 0 8000 "\"," 1 wkt SQL_Latin1_General_CP1_CI_AS 2 SQLCHAR 0 40 "\r\n" 2 area SQL_Latin1_General_CP1_CI_AS 

Die erste Zeile, "11.0" bezieht sich auf Ihre Version von SQL. Die zweite Zeile zeigt, dass dein Tisch, [level2_import], zwei Spalten hat. Jede Zeile danach beschreibt eine Spalte und folgt dem folgenden Format:

[Quellnummer] [datatyp] [Minimaler Wert] [Maximale Größe] [Begrenzungsmuster] [Zielspaltennummer] [Zielspaltenname] [Groß- / Kleinschreibung der database]

Sobald Sie diese file erstellt haben, können Sie Ihre data mit der folgenden Bulk-Insert-statement lesen:

 BULK INSERT level2_import FROM 'D:\test.csv' WITH ( FIRSTROW = 2, FORMATFILE='D:\level_2.fmt' ); ( BULK INSERT level2_import FROM 'D:\test.csv' WITH ( FIRSTROW = 2, FORMATFILE='D:\level_2.fmt' ); FIRSTROW = 2, BULK INSERT level2_import FROM 'D:\test.csv' WITH ( FIRSTROW = 2, FORMATFILE='D:\level_2.fmt' ); 

In diesem Blog finden Sie eine ausführliche Erläuterung der Formatdatei.

Versuchen Sie, .fmt in die file zu entfernen und stattdessen .txt zu verwenden, das für mich gearbeitet hat