2016-07-11 33 views
2

Ich habe eine BULK INSERT Aufgabe, die Daten von einem CSV und importiert in eine Tabelle. Das einzige Problem ist, dass eine der Spalten ein Komma enthalten kann, so dass der Import nicht wie erwartet funktioniert.Bulk einfügen fmt Textqualifikationsmerkmal

Ich habe versucht, dieses Problem zu beheben, indem ein Format (fmt) Datei zu erstellen, deren Inhalt ich habe unten aufgeführt: -

9.0 
6 
1  SQLCHAR  0  50  ","  1  "Identifier"         Latin1_General_CI_AS 
2  SQLCHAR  0  50  ","  2  "Name"            Latin1_General_CI_AS 
3  SQLCHAR  0  50  ","  3  "Date of Birth"           Latin1_General_CI_AS 
4  SQLCHAR  0  50  ","  4  "Admission"            Latin1_General_CI_AS 
5  SQLCHAR  0  50  ","  5  "Code"        Latin1_General_CI_AS 
6  SQLCHAR  0  50  "\r\n" 6  "Length"              Latin1_General_CI_AS 

Die Säule verursacht mir Schmerzen ist Spalte 2 „Name“.

Ich habe ein paar Dinge versucht, um die Spalte als Text qualifiziert und mit einem Komma zu identifizieren, aber ich bekomme nicht das gewünschte Ergebnis.

Wenn ich wie folgt ändern: -

"\"," - ich so etwas wie diese - „Richardson, Mat

Das ist nicht richtig, so habe ich versucht, diese stattdessen als auf einem anderen vorgeschlagen Foren/sites: -

"\",\"" 

Dies überhaupt nicht funktioniert und gibt mir tatsächlich den Fehler

Cannot obtain the required interface ("IID_IColumnsInfo") from OLE DB provider "BULK" for linked server "(null)".Bulk load: An unexpected end of file was encountered in the data file. 

Ich habe ein paar andere Kombinationen ausprobiert und kann das nicht richtig machen. Jede Hilfe oder Anleitung würde massiv geschätzt werden.

Antwort

1

Nicht wirklich beantworten Ihre Frage zu Format-Dateien, sondern eine mögliche Lösung für Sie arbeiten.

Format-Dateien sind unverständlich Arcana aus den 1980er Jahren zu mir, Bulk-Einsatz ist übereifrig und unerbittlich. Daher tendiere ich dazu, Daten mit ein paar Zeilen Powershell zu bereinigen. Hier ist ein Beispiel habe ich vor kurzem eine CSV-Rohr getrennt zu konvertieren, einige zufällige Angabe auf der Ausgabe zu entfernen und für Kommas in den Aufzeichnungen zu ermöglichen:

Import-Csv -Path $dirtyCsv | 
ConvertTo-CSV -NoType -Delimiter '|' | 
%{ $_.Replace('"','') } | 
Out-File $cleanCsv 

Sie erhalten die Idee ...

Diese dann einfach importiert:

BULK INSERT SomeTable FROM 'clean.csv' WITH (FIRSTROW = 2, FIELDTERMINATOR = '|', ROWTERMINATOR = '\n') 

Hoffe das hilft.