it-swarm.com.de

Importieren Sie die CSV-Datei in SQL Server

Ich suche Hilfe, um eine .csv-Datei mit BULK INSERT in SQL Server zu importieren, und ich habe einige grundlegende Fragen.

Probleme:  

  1. Die CSV-Dateidaten enthalten möglicherweise , (Komma) (Ex: description). Wie kann ich den Import dieser Daten verwalten? 

  2. Wenn der Client die CSV-Datei aus Excel erstellt, werden die Daten, die ein Komma enthalten, in "" (doppelte Anführungszeichen) eingeschlossen [wie im folgenden Beispiel]. 

  3. Wie können wir nachverfolgen, ob einige Zeilen fehlerhafte Daten enthalten und welche Importe übersprungen werden? (Überspringt der Import Zeilen, die nicht importierbar sind)

Hier ist das 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
)
149
Prabhat

Basierter SQL Server CSV-Import

1) Die CSV-Dateidaten enthalten möglicherweise , (Komma) (Ex: Beschreibung). Wie kann ich also den Import dieser Daten handhaben?

Lösung

Wenn Sie , (Komma) als Trennzeichen verwenden, gibt es keine Möglichkeit, zwischen einem Komma als Feldabschlusszeichen und einem Komma in Ihren Daten zu unterscheiden. Ich würde eine andere FIELDTERMINATOR wie || verwenden. Code würde aussehen und dies würde Komma und einfachen Schrägstrich perfekt behandeln.

2) Wenn der Client die CSV aus Excel erstellt, werden die Daten mit Kommas sind in " ... " (doppelte Anführungszeichen) eingeschlossen [wie unten Beispiel] Wie kann der Import damit umgehen?

Lösung

Wenn Sie die BULK-Einfügung verwenden, gibt es keine Möglichkeit, doppelte Anführungszeichen zu behandeln. Die Daten werden mit doppelten Anführungszeichen in die Zeilen eingefügt. Nach dem Einfügen der Daten in die Tabelle können Sie diese Anführungszeichen durch '' ersetzen.

update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')

3) Wie können wir nachverfolgen, ob einige Zeilen fehlerhafte Daten enthalten und der Import überspringt? (Überspringt der Import Zeilen, die nicht importierbar sind)?

Lösung

Um Zeilen zu behandeln, die aufgrund ungültiger Daten oder eines ungültigen Formats nicht in die Tabelle geladen wurden, könnte Handle mit der Eigenschaft ERRORFILE angegeben werden. Geben Sie den Namen der Fehlerdatei an. Die Zeilen Werden in die Fehlerdatei geschrieben . Code sollte aussehen.

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
    ERRORFILE = 'C:\CSVDATA\SchoolsErrorRows.csv',
    TABLOCK
    )
134
mr_eclair

Sie müssen zunächst 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... aus.

• Klicken Sie auf die Schaltfläche Next >

• Wählen Sie für die Datenquelle Flat File Source aus. 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 die Schaltfläche Next > klicken.

• Wählen Sie für das 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. Aktivieren Sie das Optionsfeld Use SQL Server Authentication. Geben Sie den Benutzernamen, das Kennwort und die Datenbank ein, bevor Sie auf die Schaltfläche Next > klicken.

• Im Fenster Select Source Tables and Views können Sie Zuordnungen bearbeiten, bevor Sie auf die Schaltfläche Next > klicken.

• Aktivieren Sie das Kontrollkästchen Run immediately und klicken Sie auf die Schaltfläche Next >.

• Klicken Sie auf die Schaltfläche Finish, um das Paket auszuführen.

Das Obige wurde auf dieser Website gefunden (Ich habe es verwendet und getestet):

23
Zd8n8k

2) Wenn der Client die CSV aus Excel erstellt, werden die Daten mit Kommas werden in "..." (doppelte Anführungszeichen) eingeschlossen [wie unten Beispiel] Wie kann der Import damit umgehen?

Sie sollten die Optionen FORMAT = 'CSV', FIELDQUOTE = '"' verwenden:

BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
    FORMAT = 'CSV', 
    FIELDQUOTE = '"',
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',  --CSV field delimiter
    ROWTERMINATOR = '\n',   --Use to shift the control to next row
    TABLOCK
)
14
Oleg

Der beste, schnellste und einfachste Weg, das Komma in Datenproblem zu lösen, besteht darin, eine durch Kommas getrennte Datei mit Excel zu speichern, nachdem Sie die Listentrennzeichen-Einstellung von Windows auf etwas anderes als ein Komma (z. B. eine Pipe) gesetzt haben. Dadurch wird eine von Ihnen getrennte Datei (oder was auch immer) generiert, die Sie importieren können. Dies ist hier beschrieben.

9
Sachin Kainth

Importieren Sie eine CSV-Datei in eine Datenbank mit SQL Server Management Studio.

  1. Erstellen Sie zunächst eine Tabelle in Ihrer Datenbank, in die Sie die CSV-Datei importieren. 
  2. Melden Sie sich mit SQL Server Management Studio bei Ihrer Datenbank an.
  3. Klicken Sie mit der rechten Maustaste auf die Datenbank und wählen Sie Aufgaben -> Daten importieren ...
  4. Klicken Sie auf die Schaltfläche Weiter>.
  5. Wählen Sie für Datenquelle Flat File Source aus. Verwenden Sie dann die Schaltfläche Durchsuchen, um die CSV-Datei auszuwählen. Nehmen Sie sich etwas Zeit, um den Datenimport zu konfigurieren, bevor Sie auf die Schaltfläche Weiter> klicken.
  6. Wählen Sie für 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. Aktivieren Sie die Option SQL Server-Authentifizierung verwenden, geben Sie den Benutzernamen, das Kennwort und die Datenbank ein, bevor Sie auf die Schaltfläche Weiter> klicken.
  7. Im Fenster Select Source Tables and Views können Sie Mappings bearbeiten, bevor Sie auf die Schaltfläche Next> klicken.
  8. Aktivieren Sie "Sofort ausführen" und klicken Sie auf die Schaltfläche "Weiter". 
  9. Klicken Sie auf die Schaltfläche Fertig stellen, um das Paket auszuführen.

Referenz

7
Somnath Muluk

So würde ich es lösen:

  1. Speichern Sie Ihre CSV-Datei einfach als XLS-Arbeitsblatt in Excel (Wenn Sie dies tun, müssen Sie sich keine Gedanken um Begrenzer machen. Das Tabellenkalkulationsformat von Excel wird als Tabelle gelesen und direkt in eine SQL-Tabelle importiert.)

  2. Importieren Sie die Datei mit SSIS

  3. Schreiben Sie im Import-Manager ein benutzerdefiniertes Skript, um die gesuchten Daten wegzulassen oder zu ändern (oder führen Sie ein Masterskript aus, um die zu entfernenden Daten zu überprüfen.)

Viel Glück.

4
Zee

Zum Importieren der CSV-Datei in die Datentabelle müssen Sie sich zunächst anmelden 

Anschließend können Sie mit SQLBulkCopy Massenzeilen einfügen 

using System;
using System.Data;
using System.Data.SqlClient;

namespace SqlBulkInsertExample
{
    class Program
    {
      static void Main(string[] args)
        {
            DataTable prodSalesData = new DataTable("ProductSalesData");

            // Create Column 1: SaleDate
            DataColumn dateColumn = new DataColumn();
            dateColumn.DataType = Type.GetType("System.DateTime");
            dateColumn.ColumnName = "SaleDate";

            // Create Column 2: ProductName
            DataColumn productNameColumn = new DataColumn();
            productNameColumn.ColumnName = "ProductName";

            // Create Column 3: TotalSales
            DataColumn totalSalesColumn = new DataColumn();
            totalSalesColumn.DataType = Type.GetType("System.Int32");
            totalSalesColumn.ColumnName = "TotalSales";

            // Add the columns to the ProductSalesData DataTable
            prodSalesData.Columns.Add(dateColumn);
            prodSalesData.Columns.Add(productNameColumn);
            prodSalesData.Columns.Add(totalSalesColumn);

            // Let's populate the datatable with our stats.
            // You can add as many rows as you want here!

            // Create a new row
            DataRow dailyProductSalesRow = prodSalesData.NewRow();
            dailyProductSalesRow["SaleDate"] = DateTime.Now.Date;
            dailyProductSalesRow["ProductName"] = "Nike";
            dailyProductSalesRow["TotalSales"] = 10;

            // Add the row to the ProductSalesData DataTable
            prodSalesData.Rows.Add(dailyProductSalesRow);

            // Copy the DataTable to SQL Server using SqlBulkCopy
            using (SqlConnection dbConnection = new SqlConnection("Data Source=ProductHost;Initial Catalog=dbProduct;Integrated Security=SSPI;Connection Timeout=60;Min Pool Size=2;Max Pool Size=20;"))
            {
                dbConnection.Open();
                using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
                {
                    s.DestinationTableName = prodSalesData.TableName;

                    foreach (var column in prodSalesData.Columns)
                        s.ColumnMappings.Add(column.ToString(), column.ToString());

                    s.WriteToServer(prodSalesData);
                }
            }
        }
    }
}
2
kombsh

Importieren Sie die Datei in Excel, indem Sie zuerst Excel öffnen, dann zu DATA wechseln, aus TXT -Datei importieren, die CSV-Erweiterung auswählen, die die 0-Präfix-Werte beibehält, und diese Spalte als TEXT speichern, da Excel die führende 0 ansonsten löscht ( Doppelklicken Sie NICHT, um mit Excel zu öffnen, wenn Sie numerische Daten in einem Feld haben, das mit 0 [Null] beginnt. Dann einfach als tabulatorgetrennte Textdatei speichern. Wenn Sie in Excel importieren, haben Sie die Möglichkeit, als GENERAL, TEXT usw. zu speichern. Wählen Sie TEXT, damit Anführungszeichen in der Mitte eines Strings in einem Feld wie YourCompany, LLC beibehalten werden.

BULK INSERT dbo.YourTableName
FROM 'C:\Users\Steve\Downloads\yourfiletoIMPORT.txt'
WITH (
FirstRow = 2, (if skipping a header row)
FIELDTERMINATOR = '\t',
ROWTERMINATOR   = '\n'
)

Ich wünschte, ich könnte die Funktionen FORMAT und Fieldquote verwenden, aber das scheint in meiner Version von SSMS nicht unterstützt zu werden

0
Steve Yo

Da sie den SQL-Importassistenten nicht verwenden, würden die folgenden Schritte ausgeführt:

enter image description here

  1. Klicken Sie mit der rechten Maustaste auf die Datenbank in der Option Aufgaben, um Daten zu importieren.

  2. Sobald der Assistent geöffnet ist, wählen wir den Datentyp aus, der impliziert werden soll. In diesem Fall wäre es das 

Flatfile-Quelle

Wir wählen die CSV-Datei aus, Sie können den Datentyp der Tabellen in der CSV konfigurieren, es empfiehlt sich jedoch, sie aus der CSV-Datei zu holen.

  1. Klicken Sie auf Weiter und wählen Sie die letzte Option aus

SQL-Client

Je nachdem, welche Art von Authentifizierung wir wählen, kommt eine sehr wichtige Option zum Einsatz.

  1. Wir können die ID der Tabelle in der CSV definieren (es wird empfohlen, dass die Spalten der CSV als die Felder in der Tabelle bezeichnet werden). In der Option Zuordnungen bearbeiten können Sie die Vorschau jeder Tabelle mit der Spalte der Tabelle sehen. Wenn der Assistent die ID standardmäßig einfügen soll, lassen wir die Option deaktiviert.

Aktivieren Sie die ID-Eingabe

(normalerweise nicht bei 1 beginnend). Wenn wir jedoch eine Spalte mit der ID in der CSV haben, wählen wir die Aktivierungs-ID-Einfügung 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 erscheinen, oder Warnungen, die idealerweise ignoriert werden sollten, nur wenn sie den Fehler hinterlassen, um darauf zu achten.

Dieser Link hat Bilder .

0
jarvis24