Impor file CSV ke SQL Server

Saya mencari bantuan untuk mengimpor .csv file ke SQL Server menggunakan BULK INSERT dan aku punya beberapa pertanyaan dasar.

Masalah:

  1. CSV file data yang mungkin telah , (koma) di antara (Ex: deskripsi), jadi bagaimana saya bisa membuat impor penanganan data-data ini?

  2. Jika klien membuat CSV dari Excel maka data-data yang telah koma yang tertutup dalam "," (kutip ganda) [sebagai contoh di bawah ini] jadi bagaimana melakukan impor dapat menangani hal ini?

  3. Bagaimana kita melacak jika beberapa baris yang memiliki data yang buruk, yang impor melompat? (tidak impor melompat baris yang tidak diimpor)

Berikut adalah contoh CSV dengan 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.

Dan pernyataan SQL untuk impor:

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
)
Larutan

Berdasarkan SQL Server Impor CSV

  1. CSV file data yang mungkin telah , (koma) di antara (Ex: deskripsi), jadi bagaimana saya bisa membuat impor penanganan data-data ini?

Solusi

Jika anda're menggunakan , (koma) sebagai pemisah, maka tidak ada cara untuk membedakan antara koma sebagai bidang terminator dan koma pada data anda. Saya akan menggunakan berbagai FIELDTERMINATOR like ||. Kode akan terlihat seperti ini akan menangani koma dan garis miring dengan sempurna.

  1. Jika klien membuat csv dari excel maka data-data yang telah koma yang tertutup dalam " ... " (kutip ganda) [seperti di bawah ini contoh] jadi bagaimana melakukan impor dapat menangani hal ini?

Solusi

Jika anda're menggunakan BULK insert maka tidak ada cara untuk menangani tanda kutip ganda, data akan dimasukkan dengan tanda kutip ganda ke dalam baris. setelah memasukkan data ke dalam tabel anda bisa mengganti mereka dengan tanda kutip ganda '` `'.

update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')
  1. Bagaimana kita melacak jika beberapa baris yang memiliki data yang buruk, yang impor melompat? (tidak impor melompat baris yang tidak diimpor)?

Solusi

Untuk menangani barisan yang tidak't dimuat ke meja karena data yang tidak valid atau format, bisa handle menggunakan ERRORFILE properti, menentukan kesalahan nama file, itu akan menulis baris memiliki kesalahan untuk kesalahan file. kode harus terlihat seperti.

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

Anda harus terlebih dahulu membuat tabel dalam database anda di mana anda akan dapat mengimpor file CSV. Setelah tabel dibuat, ikuti langkah-langkah di bawah ini.

• Login ke database menggunakan SQL Server Management Studio

• Klik kanan pada database dan pilih Tugas -> Impor Data...

• Klik Berikutnya > tombol

• Untuk Sumber Data, pilih Flat File Source. Kemudian gunakan tombol Browse untuk memilih file CSV. Menghabiskan beberapa waktu mengkonfigurasi bagaimana anda ingin data yang akan diimpor sebelum mengklik Next > tombol.

• Untuk Tujuan, pilih yang benar penyedia database (misalnya untuk SQL Server 2012, anda dapat menggunakan SQL Server Native Client 11.0). Masukkan nama Server. Periksa Menggunakan SQL Server Authentication radio button. Masukkan nama Pengguna, Password, dan Database sebelum mengklik Next > tombol.

• Pada Sumber Pilih Tabel dan Tampilan jendela, anda dapat Mengedit Pemetaan sebelum mengklik Next > tombol.

• Periksa segera Berjalan kotak centang dan klik Berikutnya > tombol.

• Klik pada tombol Finish untuk menjalankan paket.

Di atas ditemukan pada website (saya telah digunakan dan diuji):

Komentar (4)
  1. Jika klien membuat csv dari excel maka data-data yang telah koma yang tertutup dalam " ... " (double quotes) [seperti di bawah ini contoh] jadi bagaimana melakukan impor dapat menangani hal ini?

Anda harus menggunakan FORMAT = 'CSV', FIELDQUOTE = '",' pilihan:

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

Terbaik, tercepat dan cara termudah untuk menyelesaikan koma dalam masalah data adalah dengan menggunakan Excel untuk menyimpan file dipisahkan koma setelah mengatur Windows' daftar pemisah pengaturan untuk sesuatu yang lain dari koma (seperti pipa). Hal ini kemudian akan menghasilkan pipa (atau apapun) yang dipisahkan file untuk anda yang kemudian dapat anda impor. Hal ini dijelaskan di sini.

Komentar (0)

Pohon-pohon cemara yang anda butuhkan untuk mengimpor file CSV ke Tabel Data

Kemudian anda dapat menyisipkan baris massal menggunakan 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);
                }
            }
        }
    }
}
Komentar (1)

Berikut ini's bagaimana saya akan menyelesaikannya:

  1. Hanya Menyimpan File CSV sebagai XLS Sheet di excel(Dengan demikian, anda tidak't perlu khawatir tentang delimitiers. Excel's format spreadsheet akan dibaca sebagai sebuah tabel dan diimpor langsung ke dalam Tabel SQL)

  2. Import File Menggunakan SSIS

  3. Menulis Skrip Khusus di import manager untuk menghilangkan/mengubah data anda're looking for.(Atau menjalankan master script untuk meneliti data anda'kembali mencari untuk menghapus)

Good Luck.

Komentar (4)

Karena mereka tidak menggunakan SQL import wizard, langkah-langkah sebagai berikut:

  1. Klik kanan pada database dalam pilihan tugas-tugas untuk mengimpor data,

  2. Setelah wizard terbuka, kita pilih jenis data yang akan tersirat. Dalam kasus ini, itu akan menjadi

Flat file source

Kita pilih file CSV, anda dapat mengkonfigurasi tipe data dari tabel dalam CSV, tapi yang terbaik adalah untuk membawa itu dari CSV.

  1. Klik Berikutnya dan pilih di opsi terakhir yang

SQL client

Tergantung pada jenis otentikasi yang kita pilih, setelah ini dilakukan, sangat penting opsi datang.

  1. Kita bisa menentukan id dari tabel di CSV (dianjurkan bahwa kolom CSV harus disebut sama seperti kolom dalam tabel). Di opsi Edit Pemetaan kita dapat melihat preview dari masing-masing tabel dengan kolom spreadsheet, jika kita ingin wizard untuk menyisipkan id secara default kita meninggalkan pilihan untuk dicentang.

Aktifkan id menyisipkan

(biasanya tidak dimulai dari 1), sebaliknya jika kita memiliki kolom dengan id di CSV yang kita pilih aktifkan id insert, langkah berikutnya adalah untuk mengakhiri wizard, kita dapat meninjau perubahan-perubahan di sini.

Di sisi lain, pada jendela berikut mungkin datang peringatan, atau peringatan yang ideal adalah untuk mengabaikan hal ini, hanya jika mereka meninggalkan kesalahan diperlukan untuk membayar perhatian.

Link ini memiliki gambar.

Komentar (0)

Mengimpor file ke Excel dengan terlebih dahulu membuka excel, maka akan DATA, impor dari File TXT, pilih ekstensi csv yang akan melestarikan 0 diawali nilai-nilai, dan menyimpan kolom TEKS karena excel akan turun awalan 0 jika tidak (JANGAN double klik untuk membuka dengan Excel jika anda memiliki data numerik di lapangan dimulai dengan 0 [nol]). Kemudian simpan sebagai file Teks Tab Delimited. Ketika anda impor ke excel anda mendapatkan pilihan untuk menyimpan sebagai JENDERAL, TEXT, dll.. pilih TEKS sehingga kutipan di tengah-tengah string di lapangan seperti Perusahaananda,LLC yang diawetkan juga...

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

Aku berharap aku bisa menggunakan FORMAT dan Fieldquote fungsi tapi itu tampaknya tidak didukung dalam versi saya SSMS

Komentar (0)

Saya tahu bahwa ada jawaban yang diterima tapi tetap saja, saya ingin berbagi skenario yang mungkin membantu seseorang untuk memecahkan masalah mereka ALAT

  • ASP.NET
  • EF KODE-PENDEKATAN PERTAMA
  • SSMS
  • EXCEL

**SKENARIO saya memuat dataset yang's dalam format CSV yang kemudian akan ditampilkan pada View saya mencoba untuk menggunakan sebagian besar beban tapi aku's tidak dapat memuat sebagai BULK LOAD itu menggunakan

FIELDTERMINATOR = ','

dan Excel cell juga menggunakan , namun, saya juga tidak't menggunakan Flat file source langsung karena saya menggunakan Kode-Pendekatan Pertama dan melakukan hal itu hanya dibuat model dalam SSMS DB, tidak dalam model dari mana saya harus menggunakan sifat nanti.

SOLUSI

  1. Saya menggunakan flat-file sumber dan dibuat DB tabel dari file CSV (klik Kanan DB di SSMS -> Impor Flat FIle -> pilih CSV jalan dan melakukan semua pengaturan seperti yang diarahkan)
  2. Membuat Model Class di Visual Studio (Anda HARUS MENJAGA semua tipe data dan nama yang sama seperti yang dari file CSV dimuat dalam sql)
  3. gunakan Add-Migration di NuGet paket konsol
  4. Update DB
Komentar (0)