Impor beberapa file excel ke sql server menggunakan ssis

Saya diminta memuat banyak file Excel, masing-masing dengan beberapa lembar kerja Excel. Saya menemukan cara yang sangat mudah untuk menyelesaikan ini di SSIS menggunakan Script Task. Artikel ini akan menjelaskan bagaimana saya melakukannya

Untuk contoh ini, saya memiliki dua file Excel, File1. xlsx dan File2. xlsx, seperti yang ditunjukkan di sini

Setiap File Excel memiliki tiga lembar, yaitu lembar1, lembar2, dan lembar3. Setiap lembar memiliki dua kolom, Nama file dan nama lembar dan saya telah memasukkan satu baris di setiap lembar seperti yang ditunjukkan di bawah ini

Setiap lembar kerja Excel harus memiliki skema yang sama untuk setiap data yang disimpan

Untuk memuat data, kita mulai dengan membuat tabel dengan struktur yang sesuai dengan setiap sheet

CREATE TABLE dbo.Excelfiledata
( 
[Filename] varchar(50),
[Sheetname] vawrchar(50)
);

Selanjutnya kita membuat paket SSIS. Buka Visual Studio dan buat proyek Layanan Integrasi baru

Dalam proyek, buat dua variabel tipe data string, seperti yang ditunjukkan di bawah ini. Masukkan jalur folder untuk file Excel di Variabel FolderPath dan nama tabel yang dibuat di atas dalam variabel TableName

Di Connection Manager, tambahkan ADO baru. Koneksi bersih dan berikan nama instance dan nama database, bersama dengan kredensial lain yang diperlukan

Catatan. Beri nama koneksi sebagai Sqlconnection. Ini ditunjukkan di bawah ini

Selanjutnya, kami menyeret Tugas Script ke desktop Control Flow

Buka Tugas Skrip dan di bagian Skrip, kita perlu mengedit properti Readonlyvariables. Masukkan variabel yang dibuat di atas, dengan User. struktur nama variabel. Ini ditunjukkan pada gambar di bawah ini

Pilih "Edit Script" dan salin kode C# berikut ke dalam kotak edit. Kode ini akan mengulang semua file, membuka masing-masing, dan kemudian mengulang setiap lembar

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;
using System.Data.OleDb;
using System.Data.SqlClient;
public void Main()
{
            String FolderPath = Dts.Variables["User::FolderPath"].Value.ToString();
            String TableName = Dts.Variables["User::TableName"].Value.ToString();
            var directory = new DirectoryInfo(FolderPath);
            FileInfo[] files = directory.GetFiles();
            //Declare and initilize variables
            string fileFullPath = "";
            //Get one Book(Excel file at a time)
            foreach (FileInfo file in files)
            {
                fileFullPath = FolderPath + "\\" + file.Name;
                //Create Excel Connection
                string ConStr;
                string HDR;
                HDR = "YES";
                ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileFullPath + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\"";
                //Get sheetnames
                OleDbConnection cnn = new OleDbConnection(ConStr);                
                cnn.Open();
                DataTable dtSheet = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                string sheetname;
                sheetname = "";
                foreach (DataRow drSheet in dtSheet.Rows)
                {
                    if (drSheet["TABLE_NAME"].ToString().Contains("$"))
                    {
                        sheetname = drSheet["TABLE_NAME"].ToString();
                    }
                    //ADO.NET Connection
                    SqlConnection myADONETConnection = new SqlConnection();
                    myADONETConnection = (SqlConnection)(Dts.Connections["Sqlconnection"].AcquireConnection(Dts.Transaction) as SqlConnection);

                    //Get data from Excel Sheet
                    OleDbCommand oconn1 = new OleDbCommand("select * from [" + sheetname + "]", cnn);
                    OleDbDataAdapter adp1 = new OleDbDataAdapter(oconn1);
                    DataTable dt1 = new DataTable();
                    adp1.Fill(dt1);
                   
                    //Load data into Table  
                    using (SqlBulkCopy BC = new SqlBulkCopy(myADONETConnection))
                    {
                        BC.DestinationTableName = "dbo." + TableName;
                        foreach (var column in dt1.Columns)
                            BC.ColumnMappings.Add(column.ToString(), column.ToString());
                        BC.WriteToServer(dt1);
                    }
                }
                cnn.Close();

            }
_

Simpan dan jalankan paket. Jika Anda memiliki jalur dan nama variabel yang benar, Anda akan melihat eksekusi paket yang berhasil

Kami memiliki file Excel sumber kami yang memiliki riwayat penjualan. Setiap lembar akan memiliki data selama satu tahun. Kita bisa mendapatkan data untuk setiap nomor atau tahun. Dalam contoh ini kami memiliki data selama tiga tahun. Kita perlu memuat data ini ke tabel tujuan kita


File Excel Sumber terlihat seperti ini


Definisi Tabel Tujuan

BUAT TABEL dbo. SaleHisTory

(

ID             IDENTITAS INT(1, 1),

SalePersonName VARCHAR(100),

SaleCountry    VARCHAR(50),

SaleAmt        INT,

SheetName      VARCHAR(100)

)


Larutan.  

Kami akan menggunakan Foreach Loop Container untuk melakukan persyaratan ini. Mari kita mulai dengan pendekatan langkah demi langkah


Langkah 1.  

Buat koneksi ke file sumber Excel kami seperti yang ditunjukkan di bawah ini


Impor beberapa file excel ke sql server menggunakan ssis


Pilih Microsoft Office 12. 0 Akses Database Engine OLE DB Disediakan seperti yang ditunjukkan di bawah ini


Tekan Ok seperti yang ditunjukkan di atas pada nomor 3. Berikan Jalur File seperti yang ditunjukkan di bawah ini


Klik Semua dan Berikan nilai seperti yang ditunjukkan di bawah ini


Kita semua selesai mengonfigurasi Koneksi File Excel kita.  


Langkah 2.  

Bawa For each loop container ke Control Flow Pane dan konfigurasikan seperti yang ditunjukkan di bawah ini

Pencacah. Untuk setiap ADO. Enumerator Rowset Skema .NET

Tali Sambungan. String Koneksi OLE DB yang telah kita buat di Langkah 1

Skema. Tabel Karena kami tertarik untuk mendapatkan nama-nama lembaran


Pergi ke Pemetaan Variabel dan petakan variabel ke Table_Name seperti yang ditunjukkan di bawah ini


Tetapkan Indeks dari 0 hingga 2 karena Nama_Tabel ada di angka ketiga dalam Daftar



Langkah 3.  

Bawa Tugas Aliran Data ke panel Aliran Kontrol di dalam Foreach Loop Container. Buka Aliran Data dengan Mengklik dua kali lalu bawa ADO. Sumber .NET seperti yang ditunjukkan di bawah ini dan konfigurasikan. Satu hal yang perlu diperhatikan di sini, kami tidak memiliki opsi untuk menyediakan variabel di mana kami telah menyimpan SheetName kami, Untuk saat ini Pilih lembar apa pun yang Anda suka karena semua Lembar di Excel memiliki metadata yang sama


Seret Transformasi Kolom Turunan ke panel Aliran Data dan Sambungkan Sumber ADO NET ke sana. Lakukan percakapan data sesuai dengan kolom tujuan dan juga buat kolom baru DER_SheetName dengan menggunakan variabel SheetName


Setelah itu bawa OLE DB Destination dan hubungkan Derived Column Transformation ke sana dan petakan kolom



Langkah 4.  

Sampai di sini paket kami sudah siap tetapi hanya Nama Tabel (Nama Lembar) yang dikodekan keras di Sumber ADO NET kami. Kami ingin mengubahnya menjadi Variabel SheetName sehingga dengan setiap iterasi itu harus berubah sehingga kami dapat memuat semua lembar Excel

Untuk melakukan itu, Klik Tugas Aliran Data dan pergi ke properti lalu Ekspresi dan konfigurasikan seperti yang ditunjukkan


Setel properti aliran data Delay Validation=True sehingga seharusnya tidak validasi karena nama sheet akan diberikan saat eksekusi tidak dimulai dari validasi paket


Hasil Akhir

Jalankan paket dan periksa tabel tujuan jika semua catatan dari semua lembar excel berhasil dimuat

Data berhasil dimuat ke dbo. Tabel SaleHistory dari tiga lembar 2011,2012,1013 seperti yang ditunjukkan di bawah ini

Bagaimana cara mengimpor data dari beberapa file Excel menggunakan SSIS?

Buat paket SSIS untuk impor data dari beberapa file Excel .
BUAT TABEL [dbo]. [Impor Data SSIS](
[EmpID] [int] NULL,
[EmpName] [varchar](50) NULL,
[Sumber] [nvarchar](50) NULL
) DI [UTAMA]

Bagaimana cara mengimpor beberapa lembar Excel ke SQL Server?

Contoh yang berhasil - Impor dari beberapa lembar kerja Excel ke Tabel SQL Server .
LANGKAH 1 - Buat Tugas Baru. .
LANGKAH 2 - Menghubungkan ke SQL Server. .
LANGKAH 3 - Pilih tabel tujuan. .
LANGKAH 4 Buat sumber data ODBC. .
LANGKAH 5 - Pemetaan Kolom. .
LANGKAH 9 - Uji Tugas. .
LANGKAH 11 - Tambahkan aturan validasi data

Bagaimana cara memuat banyak file di SSIS?

Impor beberapa file teks csv ke dalam tabel SQL Server dengan loop dinamis SSIS. .
Unduh file teks untuk mengimpor dan membuat tabel dengan SSMS
Buat loop file dan aliran data SSIS
Buat variabel dinamis SSIS untuk menyimpan nama file teks
Konfigurasi wadah loop SSIS File Foreach

Bagaimana cara memuat banyak file Excel dengan nama sheet berbeda di SSIS?

Solusi. .
Buat Paket SSIS Anda dan kemudian buat variabel di bawah ini
Langkah 2. Buat ADO. NET Connection Manager seperti yang ditunjukkan di bawah ini di Paket SSIS Anda. .
Langkah 3. Memetakan variabel dalam Tugas Skrip. .
Klik Tombol Edit Skrip dan kemudian salin kode di bawah ini ke Editor Tugas Skrip Anda
Tekan tombol Save di Script Task Editor lalu tutup