Scenario: Download Script
You are working as ETL Developer / SSIS Developer. You get single or multiple text/csv files in Source Folder on daily basis. You want to create an SSIS Package that should be able to load all the files to single Table and archive after loading to table.
You want to built this package with configuration so by only provide different configuration values, it should be able to handle below scenarios
1) If your file provider decided to provide .txt file, it should be able to take them and load them
2) if your file provide decided to provide .csv files , by changing configuration value , package should be able to load the files
3) Table Name can change any time, so you should be able to provide table name by using configuration
4) Source Folder Path and Archive Folder Path can change, so you should be able to handle through configuration
5) File delimiter can also change, let's say you are getting files with comma(,). The file provider can make decision moving forward, he will be provide files with pipe( | ) .
Here is create script for my dbo.Customer table
Solution:
We can create an SSIS Package by using built-in Tasks, Transformations and Expressions. But I am moving forward with Script Task in this post. So we can learn some C# scripting language and also handle all the situation in Script Task.
Step 1: Create New SSIS Package and Variables
Open SSDT ( SQL Server Data Tools) and create new SSIS Package. After that go ahead and create variables so we can use them in configuration to pass values anytime our requirement change.
ArchiveFolder: Provide the folder path where you would like to move files after loading. Datetime part will be added to file name.
DestinationTable : Provide the Destination Table name with Schema as shown where you would like to load flat files( text files or csv files)
FileDelimiter : Provide the delimiter which is used in your txt or csv files.
FileExtension : Provide the Extension of files you would like to load from folder.
LogFolder : Provide the folder path where you would like to create log file in case of error in script task
SourceFolder: Provide the source folder path where text files or csv files are places for import process.
Create Variable in SSIS Package to Load and Archive flat files by using Script Task -SSIS tutorial
Step 2:
Click in Connection Manager Pane and then Create ADO.NET Connection by providing Server Name and database Name. After creating I have renamed it to DBConn.
Create ADO.NET Connection so we can use in Script Task to load the data to Destination Table
Step 3: Add Variables to Script Task to use from SSIS Package
Bring the Script Task on Control Flow Pane in SSIS Package and open by double clicking Check-box in front of variable to add to Script Task.
Add variables to Script Task so we can load multiple Text files or csv files to SQL Server Table in SSIS Package
Step 4: Add Script to Script task Editor in SSIS Package to import multiple CSV files or Text Files to SQL Server Table
Click Edit Button and it will open Script Task Editor.
Under #region Namespaces, I have added below code
using System.IO; using System.Data.SqlClient;
Under public void Main() {
I have added below code.
string datetime = DateTime.Now.ToString("yyyyMMddHHmmss"); try { //Declare Variables string SourceFolderPath = Dts.Variables["User::SourceFolder"].Value.ToString(); string FileExtension = Dts.Variables["User::FileExtension"].Value.ToString(); string FileDelimiter = Dts.Variables["User::FileDelimiter"].Value.ToString(); string TableName = Dts.Variables["User::DestinationTable"].Value.ToString(); string ArchiveFolder = Dts.Variables["User::ArchiveFolder"].Value.ToString(); //string ColumnList = ""; //Reading file names one by one string SourceDirectory = SourceFolderPath; string[] fileEntries = Directory.GetFiles(SourceDirectory, "*" + FileExtension); foreach (string fileName in fileEntries) { SqlConnection myADONETConnection = new SqlConnection(); myADONETConnection = (SqlConnection) (Dts.Connections["DBConn"].AcquireConnection(Dts.Transaction) as SqlConnection); //Writing Data of File Into Table int counter = 0; string line; //MessageBox.Show(fileName); System.IO.StreamReader SourceFile = new System.IO.StreamReader(fileName); while ((line = SourceFile.ReadLine()) != null) { if (counter > 0) { string query = "Insert into " + TableName + " Values ('" + line.Replace(FileDelimiter, "','") + "')"; //MessageBox.Show(query.ToString()); SqlCommand myCommand1 = new SqlCommand(query, myADONETConnection); myCommand1.ExecuteNonQuery(); } counter++; } SourceFile.Close(); //move the file to archive folder after adding datetime to it File.Move(fileName, ArchiveFolder + "\\" + (fileName.Replace(SourceFolderPath,"")).Replace(FileExtension,"") + "_" + datetime+FileExtension); Dts.TaskResult = (int)ScriptResults.Success; } } catch (Exception exception) { // Create Log File for Errors using (StreamWriter sw = File.CreateText(Dts.Variables["User::LogFolder"].Value.ToString() + "\\" + "ErrorLog_" + datetime + ".log")) { sw.WriteLine(exception.ToString()); Dts.TaskResult = (int)ScriptResults.Failure; } }
Step 5: Save Script and Run SSIS Package
Save the script in Script Editor and execute your SSIS Package, It should load the files from Source folder to SQL Server table and move the file to archive folder after loading it.
Here are records loaded by package in dbo.Customer table from my sample files.
How to load multiple csv files to SQL Server Table by using Script Task in SSIS Package
Files moved to Archive Folder after datetime added to them as shown below.
How to load multiple text files by using script task in ssis package and archive after loading
Related Posts / Videos on Dynamic Text / CSV files by Script Task
- How to Import Multiple Text or CSV files to SQL Server Table by using Script Task in SSIS Package
- How to Load Text /CSV files with same or less columns than destination table by using Script Task in SSIS Package
- How to load Data from Multiple Text / CSV Files to SQL Server Table with File Name by using Script Task in SSIS Package
- How to Create Tables Dynamically from Flat Files and load Data in SSIS Package
- How to load Flat files to SQL Server Tables according to the Name of Flat File in SSIS Package
- How to Create Multiple Text/CSV Files Dynamically From a SQL Server Table depending upon Distinct Column Value in SSIS Package
- How to Export large table to multiple text/csv files by row count in SSIS Package
- How to create Text / CSV File Dynamically from Table or View in SSIS Package
- How to create Text / CSV File Dynamically from Stored Procedure Results in SSIS Package
- How to Load all text/csv files to single Text/CSV File from a folder in SSIS Package
- How to export all the tables from a database to CSV files with date-time in SSIS Package
i use that version of notepad for mac
ReplyDeleteI need to unzip files first before doing this can you help me
ReplyDeletegreat informative information of sql. thanks for sharing these information with all of us. Kinemaster Lite
ReplyDeleteSo I bought a good ticket to London, ready to go to London to see. The various situations encountered along the way will not be mentioned, after turning around a few stores did not find the popular Rao, and even steel models are rare. I came across the only piece of inter-gold GMT, consult, had been ready to exceed the public price of the intention, the results of the sales response is more outrageous, hitch,Top Quality Replica Shoes I have to buy at least 300,000 or more Rao to sell me. At that time, my heart was really MMP, directly carry the bag to roll away. Then diverted to Manchester, turned around a lot of watch stores are not, and tried IWC's Portuguese meter, think about spending so much money to buy an ETA core always feel strange, so give up. Blancpain's Fifty Fathoms also tried, when the sales also gave a discount, and finally because of various reasons still could replica Louis Vuitton bags not pay. I was really tired of going around, sitting in the car on the return trip and contacting my family, saying that I was not going to buy it, I was tired of walking around so many places for so many days without seeing anything, why should I spend money as a grandson, I'm not going to fucking buy it. My mother consoled some, said that do not buy it, the rest of the money they want to do what to do.Luxus Replik Uhren So the rest of the days to the family bought a lot of things, completely do not intend to buy a table, which also for the future to miss the rose gold yacht to lay the groundwork.
ReplyDelete