Import fișier CSV în SQL Server

Caut ajutor pentru a importa un `.csv fișier în SQL Server folosind mai mare parte a INTRODUCE și am câteva întrebări de bază.

Probleme:

  1. Fișierul CSV de date este posibil , (virgula) în între (Ex: descriere), deci cum pot face import de manipulare aceste date?

  2. În cazul în care clientul creează CSV din Excel atunci datele care au virgulă sunt închise în termen de "" (ghilimele duble) [ca în exemplul de mai jos] deci, cum a face import pot descurca cu asta?

  3. Cum putem urmări dacă unele rânduri au rău de date, care importa sare? (nu importa sare peste rânduri că nu sunt de import)

Aici este proba CSV cu antet:

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.

Și instrucțiunea SQL de import:

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
)
Soluția

Bazat pe SQL Server Import CSV

  1. fișierul CSV de date este posibil , (virgula) în între (Ex: descriere), deci cum pot face import de manipulare aceste date?

Soluție

Daca're folosind , (virgula) ca delimitator, atunci nu există nici o modalitate de a diferenția între o virgulă ca un câmp terminator și o virgulă în date. Mi-ar folosi un alt FIELDTERMINATOR "ca"||. Codul ar arata ca si aceasta se va ocupa de virgulă și un singur slash perfect.

  1. în Cazul în care clientul a crea csv din excel atunci datele care au virgulă sunt închise în termen de " ... " (ghilimele duble) [ca cea de mai jos de exemplu] deci, cum a face import pot descurca cu asta?

Soluție

Daca're folosind mai mare parte a introduce atunci nu există nici o modalitate de a gestiona dublu citate, datele vor fi introdus cu ghilimele duble în rânduri. după introducerea datelor în tabel-ai putea înlocui acele ghilimele duble cu '` `'.

update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')
  1. Cum putem urmări dacă unele rânduri au rău de date, care importa sare? (nu importa sare peste rânduri că nu sunt de import)?

Soluție

Să se ocupe de rânduri care sunt't încărcat în masă pentru a-date invalide sau format, ar putea fi mâner cu ajutorul ERRORFILE proprietate, specificați eroare de nume de fișier, se va scrie rânduri având eroare la eroare de fișier. codul ar trebui să arate.

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
    )
Comentarii (5)

Trebuie mai întâi să creați un tabel în baza de date în care va fi importați fișierul CSV. După masă este creat, urmați pașii de mai jos.

• Log în baza de date folosind SQL Server Management Studio

• Click dreapta pe baza de date și selectați Sarcini -> Import Date...

• Faceți clic pe `Next > butonul

• Pentru Sursa de Date, selectați Plat Fișier Sursă. Apoi, utilizați butonul Browse pentru a selecta fișierul CSV. Petrece ceva timp configurați modul în care doriți ca datele să fie importate înainte de a face clic peNext > buton.

• Pentru Destinație, selectați corect furnizor de baze de date (de exemplu pentru SQL Server 2012, puteți utiliza SQL Server Client Nativ 11.0). Introduceți numele Serverului. Verificați Utilizarea SQL Server Authenticationbuton radio. Introduceți numele de Utilizator, Parola, și a bazei de Date înainte de a face clic peNext > buton.

• Pe Selectați Sursa Tabele și Vizualizări fereastră, puteți Edita Mapările înainte de a face clic pe `Next > buton.

• Verificați Fugi imediatcasetă de selectare și faceți clic peNext > buton.

• Faceți clic pe butonul Finish pentru a rula pachetul.

Mai sus a fost găsit pe acest ul (l-am folosit si testat):

Comentarii (4)
  1. în Cazul în care clientul a crea csv din excel atunci datele care au virgulă, sunt incluse în " ... " (ghilimele duble) [ca cea de mai jos de exemplu] deci, cum a face import pot descurca cu asta?

Ar trebui să utilizați FORMAT = 'CSV', FIELDQUOTE = '"' opțiuni:

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
)
Comentarii (1)

Cel mai bun, mai rapid și mai simplu mod de a rezolva virgulă în datele problema este de a utiliza Excel pentru a salva un fișier separate de virgulă după Windows' separatorul de listă setare pentru a altceva decât o virgulă (cum ar fi o țeavă). Acest lucru va genera apoi o țeavă (sau orice altceva) fișier separat pentru că aveți posibilitatea să importați apoi. Acest lucru este descris aici.

Comentarii (0)

Brazi aveți nevoie pentru a importa fișierul CSV în Tabelul de Date

Apoi, puteți introduce rânduri în vrac, folosind 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);
                }
            }
        }
    }
}
Comentarii (1)

Aici's cum mi-ar rezolva problema:

  1. Doar Salva ca un Fișier CSV XLS Sheet in excel(Procedând astfel, nu m't trebuie să vă faceți griji despre delimitiers. Excel's format foaie de calcul va fi citit ca un tabel și importate direct într-un Tabel SQL)

  2. Importați Fișierul Folosind SSIS

  3. Scrie un Script Personalizat din import manager pentru a omite/modifica datele pe care le're în căutarea pentru.(Sau de a rula un script master pentru a examina datele pe care le're în căutarea de a elimina)

Noroc.

Comentarii (4)

Pentru că ei nu folosesc SQL import wizard, pașii ar fi după cum urmează:

  1. Click dreapta pe baza de date în opțiunea sarcini de import date,

  2. După ce expertul este deschis, vom selecta tipul de date să fie implicită. În acest caz ar fi

Plat fișier sursă

Vom selecta fișierul CSV, puteți configura tipul de date din tabelele de la CSV, dar cel mai bine este să-l aducă de la CSV.

  1. Faceți clic pe Next și selectați în ultima opțiune, care este

SQL client

În funcție de tipul de autentificare vom selecta, odată ce se face acest lucru, o opțiune foarte important vine.

  1. Putem defini id-ul de masă în format CSV (este recomandat coloanele de CSV ar trebui să fie numit la fel ca și câmpurile din tabel). În opțiunea Editare Mapările putem vedea o previzualizare de fiecare masă cu coloană a foii de calcul, dacă vrem expertul pentru a introduce id-ul implicit ne lăsați opțiunea unchecked.

Permite a introduce id-ul

(de obicei, nu pornind de la 1), în schimb dacă avem o coloana cu id-ul în CSV vom selecta enable id-ul introduce, următorul pas este de a termina expertul, putem vedea schimbări aici.

Pe de altă parte, în fereastra de mai jos poate veni alerte, sau avertismente idealul este de a ignora acest lucru, doar dacă pleacă de eroare este necesar să se acorde atenție.

Acest link are imagini.

Comentarii (0)

Importați fișierul în Excel prin prima deschidere excel, apoi merge la DATE, import din TXT Fișier, alegeți extensia csv, care va păstra 0 prefixate valori, și de a salva acea coloană ca TEXT, deoarece excel va scadea lider 0 în caz contrar (NU dublu clic pentru a deschide cu Excel dacă aveți date numerice într-un domeniu incepand cu 0 [zero]). Apoi salva ca o Fila fișier Text Delimitat. Atunci când importul în excel veți obține o opțiune pentru a salva cât mai GENERAL, TEXT, etc.. alege TEXT, astfel încât citate în mijlocul unui șir de caractere într-un câmp ca YourCompany,LLC sunt conservate, de asemenea,...

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

Aș vrea să pot folosi FORMATUL și Fieldquote funcționalitate, dar care nu pare a fi acceptate în versiunea mea de SSMS

Comentarii (0)

Știu că nu sunt acceptate de răspuns, dar totuși, vreau să-mi împart scenariu care poate ajuta cineva sa rezolv problema lor INSTRUMENTE

  • ASP.NET
  • EF COD-PRIMA ABORDARE
  • SSMS
  • EXCEL

SCENARIU am fost de încărcare set de date care's în format CSV, care a fost mai târziu să fie afișate la Vedere am încercat să folosesc cea mai mare parte a încărca, dar am's în imposibilitatea de a încărca ca `VRAC ÎNCĂRCARE a fost utilizarea

FIELDTERMINATOR = ','

și Excel celula a fost, de asemenea, folosind , cu toate acestea, de asemenea, am putea't folosi Plat fișier sursă` direct pentru că am fost folosind Codul-Prima Abordare și de a face că a făcut doar modelul din SSMS DB, nu în modelul de la care am avut de a utiliza proprietățile mai târziu.

SOLUȚIE

  1. Am folosit plat fișier sursă și a făcut DB masa de fișier CSV (click Dreapta DB în SSMS -> Import Fișier Plat -> selectați CSV calea și de a face toate setările conform instrucțiunilor)
  2. Model de Clasă în Visual Studio (TREBUIE să PĂSTREZE toate tipurile de date și același nume ca al fișierului CSV încărcate în sql)
  3. folosesc Add-Migrația în pachete NuGet consola
  4. Actualizare DB
Comentarii (0)