Importer un fichier CSV dans SQL Server

Je cherche de l'aide pour importer un fichier .csv dans SQL Server en utilisant BULK INSERT et j'ai quelques questions de base.

Questions:

  1. Les données du fichier CSV peuvent avoir , (virgule) entre les deux (Ex: description), alors comment puis-je faire importer ces données?

  2. Si le client crée le CSV à partir D'Excel, les données qui ont une virgule sont entourées de "" (guillemets doubles) [comme l'exemple ci-dessous] alors comment l'importation peut-elle gérer cela?

  3. Comment pouvons-nous suivre si des lignes ont de mauvaises données, l'importation saute? (l'importation ignore les lignes qui ne sont pas importables)

Voici L'exemple de CSV avec en-tête:

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.

Et instruction SQL à importer:

BULK INSERT SchoolsTemp
FROM 'C:CSVDataSchools.csv'
WITH
(
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',  --CSV field delimiter
    ROWTERMINATOR = 'n',   --Use to shift the control to next row
    TABLOCK
)
126
demandé sur Somnath Muluk 2013-03-06 12:53:41

8 réponses

Importation CSV SQL Server basée sur

1) les données du fichier CSV peuvent avoir , (virgule) entre (Ex: description), alors comment puis-je faire importer ces données?

Solution

Si vous utilisez , (virgule) comme délimiteur, il n'y a aucun moyen de différencier une virgule en tant que terminateur de champ et une virgule dans vos données. J'utiliserais un FIELDTERMINATOR différent comme ||. Le Code ressemblerait et cela va gérer la virgule et la barre oblique unique parfaitement.

2) si le client crée le csv à partir d'excel, les données qui ont les virgules sont incluses dans " ... " (guillemets doubles) [comme ci-dessous exemple] alors, comment l'importation peut-elle gérer cela?

Solution

Si vous utilisez BULK insert, il n'y a aucun moyen de gérer les guillemets doubles, les données seront inséré avec des guillemets doubles dans les lignes. après avoir inséré les données dans la table vous pouvez remplacer ces guillemets par ''.

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

3) Comment Pouvons-nous suivre si certaines lignes ont de mauvaises données, quels sauts d'importation? (l'importation ignore-t-elle les lignes qui ne sont pas importables)?

Solution

Pour gérer les lignes qui ne sont pas chargées dans la table en raison de données ou de format non valides, gérer en utilisant ERRORFILE propriété , spécifiez le nom du fichier d'erreur, il va écrire les lignes avoir erreur au fichier d'erreur. code devrait ressembler.

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
    )
124
répondu mr_eclair 2017-09-08 03:48:38

Vous devez d'abord créer une table dans votre base de données dans laquelle vous allez importer le fichier CSV. Une fois la table créée, suivez les étapes ci-dessous.

* connectez-vous à votre base de données en utilisant SQL Server Management Studio

* faites un clic droit sur votre base de données et sélectionnez Tasks -> Import Data...

{[10•} * Cliquez sur le bouton Next >

• Pour la Source de Données, sélectionnez Flat File Source. Ensuite, utilisez le bouton Parcourir pour sélectionner le fichier CSV. Passez du temps à configurer la façon dont vous voulez que les données soient importées avant de cliquer sur le bouton Next >.

* pour la Destination, sélectionnez le fournisseur de base de données approprié (par exemple, pour SQL Server 2012, vous pouvez utiliser SQL Server Native Client 11.0). Entrez le nom du serveur. Cochez la case d'option Use SQL Server Authentication. Saisissez le nom D'utilisateur, le mot de passe et la base de données avant de cliquer sur le bouton Next >.

* dans la fenêtre Sélectionner les Tables et les vues Source, vous pouvez modifier les mappages avant de cliquer sur le bouton Next >.

* cochez la case Run immediately et cliquez sur Bouton Next >.

* Cliquez sur le bouton Finish pour exécuter le package.

Ce qui précède a été trouvé sur ce site (Je l'ai utilisé et testé):

17
répondu Zd8n8k 2018-02-14 09:42:52

Le meilleur moyen, le plus rapide et le plus simple de résoudre le problème de virgule dans les données est D'utiliser Excel pour enregistrer un fichier séparé par des virgules après avoir défini le paramètre séparateur de liste de Windows sur autre chose qu'une virgule (comme un tuyau). Cela générera alors un fichier séparé de pipe (ou autre) pour vous que vous pouvez ensuite importer. Ceci est décrit ici.

8
répondu Sachin Kainth 2013-11-07 16:45:24

2) si le client crée le csv à partir d'excel, les données qui ont les virgules sont enfermées dans " ... "(guillemets doubles) [comme ci-dessous exemple] alors, comment l'importation peut-elle gérer cela?

Vous devez utiliser FORMAT = 'CSV', FIELDQUOTE = '"' options:

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
)
8
répondu Oleg 2018-01-23 09:11:10

Importez un fichier CSV dans une base de données par SQL Server Management Studio.

  1. tout d'abord, créez une table dans votre base de données dans laquelle vous allez importer le fichier CSV.
  2. Connectez-vous à votre base de données à L'aide de SQL Server Management Studio.
  3. Cliquez avec le bouton droit sur la base de données et sélectionnez tâches -> Importer des données...
  4. Cliquez sur le bouton Suivant >.
  5. Pour source de données, sélectionnez Source de fichier plat. Ensuite, utilisez le bouton Parcourir pour sélectionner le fichier CSV. Passez du temps à configurer l'importation de données avant de cliquer sur le Prochain bouton>.
  6. pour Destination, sélectionnez le fournisseur de base de données correct (par exemple, pour SQL Server 2012, vous pouvez utiliser SQL Server Native Client 11.0). Entrez le nom du serveur; cochez Utiliser L'authentification SQL Server, entrez le nom D'utilisateur, le mot de passe et la base de données avant de cliquer sur le bouton Suivant>.
  7. dans la fenêtre Sélectionner les Tables et les vues Source, vous pouvez modifier les mappages avant de cliquer sur le bouton Suivant >.
  8. cochez exécuter immédiatement et cliquez sur le bouton Suivant >.
  9. Cliquez sur le bouton Terminer pour exécuter le package.

Référence

7
répondu Somnath Muluk 2017-09-22 10:48:15

Firs vous devez importer le fichier CSV dans la Table de données

Ensuite, vous pouvez insérer des lignes en vrac en utilisant SQLBulkCopy

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);
                }
            }
        }
    }
}
3
répondu kombsh 2013-12-11 16:40:10

Voici comment je le résoudrais:

  1. Enregistrez simplement votre fichier CSV en tant que Feuille XLS dans excel (ce faisant, vous n'auriez pas à vous soucier des délimiteurs. Le format de feuille de calcul Excel sera lu comme une table et importé directement dans une Table SQL)

  2. Importer le fichier à L'aide de SSIS

  3. Écrire un Script Personnalisé dans le gestionnaire d'importation d'omettre/modifier les données que vous recherchez.(Ou exécutez un script maître pour examiner les données que vous recherchez Supprimer)

Bonne Chance.

3
répondu Zee 2017-03-17 18:56:24

Comme ils n'utilisent pas L'Assistant d'importation SQL, les étapes sont les suivantes:

entrez la description de l'image ici

  1. Cliquez-Droit sur la base de données dans l'option tâches à importer données,

  2. Une Fois l'assistant est ouvert, sélectionnez le type de données à être implicite. Dans ce cas, ce serait le

Source de fichier plat

Nous sélectionnons le fichier CSV, vous pouvez configurer le type de données des tables dans le CSV, mais il est préférable d'apporter ça vient du CSV.

  1. Cliquez sur Suivant et sélectionnez la dernière option qui est

Client SQL

En Fonction de notre type d'authentification, nous les sélectionnons, une fois cela fait, une option très importante vient.

  1. Nous pouvons définir l'id de la table dans le CSV (il est recommandé que les colonnes du CSV soient appelées de la même manière que les champs de la table). Dans l'option Modifier les Mappages nous pouvons voir l'aperçu de chaque tableau à la colonne de la feuille de calcul, si nous voulons l'assistant d'insérer l'id par défaut, nous laissez l'option désactivée.

Activer l'insertion d'id

(généralement pas à partir de 1), au lieu de cela, si nous avons une colonne avec l'id dans le CSV, nous sélectionnons l'insertion d'ID d'activation, l'étape suivante consiste à mettre fin à l'Assistant, nous pouvons examiner les modifications ici.

D'autre part, dans la fenêtre suivante peut venir des alertes, ou avertissements l'idéal est d'ignorer ce, seulement s'ils quittent erreur est nécessaire pour faire attention.

Ce lien contient des images .

0
répondu jarvis24 2018-05-10 15:27:58