Ich suche Hilfe beim Importieren einer .csv
Datei in SQL Server mit BULK INSERT
und habe einige grundlegende Fragen.
Probleme:
Die CSV-Dateidaten können
,
(Komma) dazwischen haben (Beispiel: Beschreibung). Wie kann ich also den Import für diese Daten durchführen?Wenn der Client die CSV aus Excel erstellt, werden die Daten mit Komma eingeschlossen
""
(doppelte Anführungszeichen) [wie im folgenden Beispiel]. Wie kann der Import damit umgehen?Wie verfolgen wir, ob einige Zeilen fehlerhafte Daten enthalten, die importiert werden? (Überspringt beim Importieren Zeilen, die nicht importierbar sind)
Hier ist die Beispiel-CSV mit Header:
Name,Class,Subject,ExamDate,Mark,Description
Prabhat,4,Math,2/10/2013,25,Test data for prabhat.
Murari,5,Science,2/11/2013,24,"Test data for his's test, where we can test 2nd ROW, Test."
sanjay,4,Science,,25,Test Only.
Und zu importierende SQL-Anweisung:
BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
TABLOCK
)
sql
sql-server
csv
bulkinsert
bulk
Prabhat
quelle
quelle
BULK NSERT
für sie oder haben keine Berechtigungen).Antworten:
Basierter SQL Server CSV-Import
Lösung
Wenn Sie
,
(Komma) als Trennzeichen verwenden, können Sie in Ihren Daten nicht zwischen einem Komma als Feldterminator und einem Komma unterscheiden. Ich würde ein anderesFIELDTERMINATOR
wie verwenden||
. Code würde so aussehen und dies wird Komma und einzelnen Schrägstrich perfekt verarbeiten.Lösung
Wenn Sie BULK insert verwenden, gibt es keine Möglichkeit, doppelte Anführungszeichen zu verarbeiten. Daten werden mit doppelten Anführungszeichen in Zeilen eingefügt. Nach dem Einfügen der Daten in die Tabelle können Sie diese doppelten Anführungszeichen durch '
' ersetzen .
Lösung
Um Zeilen zu verarbeiten, die aufgrund ungültiger Daten oder ungültiger Formate nicht in die Tabelle geladen wurden, können Sie die ERRORFILE-Eigenschaft verwenden. Geben Sie den Namen der Fehlerdatei an. Die fehlerhaften Zeilen werden in die Fehlerdatei geschrieben . Code sollte so aussehen.
quelle
Sie müssen zuerst eine Tabelle in Ihrer Datenbank erstellen, in die Sie die CSV-Datei importieren. Führen Sie nach dem Erstellen der Tabelle die folgenden Schritte aus.
• Melden Sie sich mit SQL Server Management Studio bei Ihrer Datenbank an
• Klicken Sie mit der rechten Maustaste auf Ihre Datenbank und wählen Sie
Tasks -> Import Data...
• Drücke den
Next >
Schaltfläche• Wählen Sie als Datenquelle aus
Flat File Source
. Verwenden Sie dann die Schaltfläche Durchsuchen, um die CSV-Datei auszuwählen. Nehmen Sie sich etwas Zeit, um zu konfigurieren, wie die Daten importiert werden sollen, bevor Sie auf klickenNext >
Schaltfläche .• Wählen Sie als Ziel den richtigen Datenbankanbieter aus (z. B. für SQL Server 2012 können Sie SQL Server Native Client 11.0 verwenden). Geben Sie den Servernamen ein. Überprüfen Sie das
Use SQL Server Authentication
Optionsfeld. Geben Sie den Benutzernamen, das Passwort und die Datenbank ein, bevor Sie auf dieNext >
Schaltfläche klicken .• Im Fenster Quellentabellen und -ansichten auswählen können Sie Zuordnungen bearbeiten, bevor Sie auf klicken
Next >
Schaltfläche .• Aktivieren Sie das
Run immediately
Kontrollkästchen und klicken Sie aufNext >
Schaltfläche.• Klicken Sie auf
Finish
Schaltfläche, um das Paket auszuführen.Das Obige wurde auf dieser Website gefunden (ich habe es verwendet und getestet):
quelle
Sie sollten die Optionen FORMAT = 'CSV', FIELDQUOTE = '"' verwenden:
quelle
Der beste, schnellste und einfachste Weg, um das Komma in Datenproblemen zu beheben, besteht darin, Excel zu verwenden, um eine durch Kommas getrennte Datei zu speichern, nachdem die Einstellung für das Listentrennzeichen von Windows auf etwas anderes als ein Komma (z. B. eine Pipe) festgelegt wurde. Dadurch wird eine durch Pipe (oder was auch immer) getrennte Datei für Sie generiert, die Sie dann importieren können. Dies wird hier beschrieben .
quelle
Zunächst müssen Sie die CSV-Datei in die Datentabelle importieren
Anschließend können Sie mit SQLBulkCopy Massenzeilen einfügen
quelle
So würde ich es lösen:
Speichern Sie Ihre CSV-Datei einfach als XLS-Blatt in Excel (auf diese Weise müssen Sie sich keine Gedanken über Trennzeichen machen. Das Tabellenformat von Excel wird als Tabelle gelesen und direkt in eine SQL-Tabelle importiert.)
Importieren Sie die Datei mit SSIS
Schreiben Sie ein benutzerdefiniertes Skript in den Importmanager, um die gesuchten Daten wegzulassen / zu ändern. (Oder führen Sie ein Masterskript aus, um die zu entfernenden Daten zu überprüfen.)
Viel Glück.
quelle
Da sie den SQL-Importassistenten nicht verwenden, lauten die Schritte wie folgt:
Klicken Sie in den Optionsaufgaben zum Importieren von Daten mit der rechten Maustaste auf die Datenbank.
Sobald der Assistent geöffnet ist, wählen wir den zu implizierenden Datentyp aus. In diesem Fall wäre es das
Wir wählen die CSV-Datei aus. Sie können den Datentyp der Tabellen in der CSV konfigurieren, aber es ist am besten, ihn aus der CSV zu holen.
Abhängig von unserer Art der Authentifizierung wählen wir diese aus. Sobald dies erledigt ist, kommt eine sehr wichtige Option.
(normalerweise nicht ab 1) Wenn wir stattdessen eine Spalte mit der ID in der CSV haben, wählen wir die Option zum Einfügen der Aktivierungs-ID aus. Der nächste Schritt besteht darin, den Assistenten zu beenden. Wir können die Änderungen hier überprüfen.
Auf der anderen Seite können im folgenden Fenster Warnungen oder Warnungen angezeigt werden. Das Ideal ist, dies zu ignorieren, nur wenn sie Fehler hinterlassen, ist dies erforderlich, um Aufmerksamkeit zu schenken.
Dieser Link hat Bilder .
quelle
Importieren Sie die Datei in Excel, indem Sie zuerst Excel öffnen, dann zu DATA wechseln, aus TXT-Datei importieren, die CSV-Erweiterung auswählen, bei der 0 Präfixwerte beibehalten werden, und diese Spalte als TEXT speichern, da Excel sonst die führende 0 löscht (doppelklicken Sie NICHT mit Excel zu öffnen, wenn Sie numerische Daten in einem Feld haben, das mit einer 0 [Null] beginnt). Speichern Sie dann einfach als tabulatorgetrennte Textdatei. Wenn Sie in Excel importieren, erhalten Sie die Option, als ALLGEMEIN, TEXT usw. zu speichern. Wählen Sie TEXT, damit auch Anführungszeichen in der Mitte einer Zeichenfolge in einem Feld wie YourCompany, LLC erhalten bleiben.
Ich wünschte, ich könnte die Funktionen FORMAT und Fieldquote verwenden, aber dies scheint in meiner Version von SSMS nicht unterstützt zu werden
quelle
Ich weiß, dass es akzeptierte Antworten gibt, aber ich möchte trotzdem mein Szenario teilen, das vielleicht jemandem hilft, sein Problem zu lösen WERKZEUGE
SZENARIO i wurde das Laden des Datensatzes , die im CSV - Format ist , die später auf die Ansicht zu zeigen war ich versucht , die Massenladen zu benutzen , aber ich nicht in der Lage ist , wie zu laden
BULK LOAD
wurde mitund Excel-Zelle wurde auch verwendet,
,
aber ich konnte auch nichtFlat file source
direkt verwenden, weil ich verwendet habeCode-First Approach
das nur erstellte Modell in SSMS DB und tat, nicht in dem Modell, aus dem ich die Eigenschaften später verwenden musste.LÖSUNG
Add-Migration
in der NuGet-Paketkonsolequelle
Ich weiß, dass dies nicht die genaue Lösung für die obige Frage ist, aber für mich war es ein Albtraum, als ich versuchte, Daten von einer Datenbank auf einem separaten Server auf meinen lokalen Server zu kopieren .
Ich habe versucht, dies zu tun, indem ich zuerst Daten vom Server auf meine lokale Tabelle exportierte
CSV/txt
und sie dann in meine lokale Tabelle importierte .Beiden Lösungen: mit dem Schreiben der Abfrage Import nach unten
CSV
oder den SSMS Datenimport - Assistenten wurde immer Fehler produziert (Fehler waren sehr allgemein gehalten , sagten , dass es ein Problem ist , das Parsen). Und obwohl ich nichts Besonderes tun, nur exportieren zuCSV
und dann zu versuchen , ImportCSV
in dem lokalenDB
, waren die Fehler immer da.Ich habe versucht, den Mapping-Bereich und die Datenvorschau zu betrachten, aber es gab immer ein großes Durcheinander. Und ich weiß, dass das Hauptproblem darin bestand, aus einer der
table
Spalten zu kommen, die enthielt,JSON
und derSQL
Parser behandelte das falsch.Also habe ich mir irgendwann eine andere Lösung ausgedacht und möchte sie teilen, falls jemand anderes ein ähnliches Problem hat.
Ich habe den Export-Assistenten verwendet auf dem externen Server verwendet.
Führen Sie die folgenden Schritte aus, um denselben Vorgang zu wiederholen:
1) Klicken Sie mit der rechten Maustaste auf die Datenbank und wählen Sie
Tasks -> Export Data...
2) Wenn der Assistent geöffnet wird, wählen Sie Weiter und anstelle von "Datenquelle:" die Option "SQL Server Native Client".
3) Nachdem Sie auf Weiter geklickt haben, müssen Sie das Ziel auswählen .
Wählen Sie dazu erneut "SQL Server Native Client".
Dieses Mal können Sie Ihre lokale (oder eine andere externe
DB
) angebenDB
.4) Nachdem Sie auf die Schaltfläche Weiter geklickt haben, haben Sie zwei Möglichkeiten, entweder die gesamte Tabelle von einer
DB
in eine andere zu kopieren oder die Abfrage aufzuschreiben, um die genauen zu kopierenden Daten anzugeben. In meinem Fall brauchte ich nicht die gesamte Tabelle (sie war zu groß), sondern nur einen Teil davon. Daher habe ich "Eine Abfrage schreiben, um die zu übertragenden Daten anzugeben" ausgewählt.5) Und schließlich müssen Sie die Zieltabelle angeben, in der die Daten ausgewählt werden.
Gehen Sie jetzt direkt zum Ende des Assistenten, indem Sie auf die Schaltflächen Weiter / Fertig stellen klicken.
quelle
Kann sein , SSMS: Wie importieren (Kopieren / Einfügen) Daten aus Excel helfen können (wenn Sie nicht verwenden wollen
BULK INSERT
für sie oder haben keine Berechtigungen).quelle