a complex ssis package
TRANSCRIPT
Package values passed to parameters.dtsx
Control
Flow
Data
Flow
Event Handler (Raise events once Package starts executing)
Package Explorer
Connection Used—
1. OLEDB Connection
2. Flat File Connection
Control Flow Task Used—
1. Execute SQL Task
2. Data Flow Task
3. Script Task
Data Flow Task/Transformation Used—
1. Flat File Source/Destination
2. OLEDB Destination
3. Multicast Transformation
4. Conditional Split Transformation
5. Data Conversion Transformation
6. Derived Column Transformation
7. Row Count Transformation
Event Handler Used—
1. OnError
2. OnPrevalidate
3. OnPostValiadte
1-Truncates Employee_Details and Employee_Strenth Tables in SQL Server--->
It uses ‘Execute SQL Task’ to Truncate Tables [Employee_Details] and [Employee_Strenth] in ‘Nitil
Database’ using ‘Connects to SQL Server--LocalHost.Nitil’ Connection
Truncate table [Employee_Details];
Truncate table [Employee_Strenth];
2-Picks up Every ( 4 Files) Flat File---Foreach Loop Container---->
It uses ‘Foreach Loop Contaner’ to pick up data (flat files’ data) from path
‘C:\Users\Nitil\Desktop\package practice\ForEach’ using variable ‘Path of file’. Connection string is
mapped with variable ‘Path of file’ to store the connection and Expressions are used here to evaluate
variable’s value dynamically(changes the connection every time for all 4 files) so it could pick up all the
files from path ‘C:\Users\Nitil\Desktop\package practice\ForEach’
3-Copy Data from Flat File and load it to sql Server and Flat Files---Data Flow Task--->
Once all files are picked up it will perform E (Extract), T(Transform) and L(Load) the Data
a- Copy Data from Flat File---Flat File Source--->Extracts data from flat file Path using connection
‘Extract Flat files--Flat File Connection Manager 1’
Note: ‘fx’ mentioned in connection that means this connection is using expressions
b. Copy Error Output Of Flat File to "FlatFile_Source_Error Table"---OLEDB Destination--->
If any error comes due to irrelevant data (for Example data type is not matched with flat file source and SQL destination Table) in flat file that will load in table ‘[Nitil].[dbo].[FlatFile_Source_Error]’ and we can analyze the error by querying the data from table
c. Move data to Multiple location---Multicast---->
‘Malticast’ Transformation is used to move data to multiple locations
For example in this package, I am moving data to 3 locations after transformations.
d- Performs Aggregation on Data—Aggregate--->
‘Aggregate Transformation’ is used here to perform aggregation on data
For Example In this package, I am going to find ‘Total employees’ for each Job, gender and marital
status.
e- Loads Aggregated Data to "Employee_Strenth" Table---OLEDB Destination--->
Once aggregation is done data will load to table [Nitil].[dbo].[Employee_Strenth] Below output is mentioned once you query the data from ‘[Employee_Strenth]’
f- Move Data to different location on the basis of Condition-----Conditional Split--->
Conditional Split Transformation moves data to different locations on the basis of condition.
For Example In this package, I have mentioned conditions for desired output and data get spitted in
Female and Male output
g- Loads Female Ouput--Flat File Destination--->
It loads data for Female Employees in folder ‘C:\Users\Nitil\Desktop\package
practice\ForEach\Output’ using connection “Load "Female"Output--Flat File Connection
Manager”
h- Loads Male Output--Flat File Destination--->
It loads data for Male Employees in folder ‘C:\Users\Nitil\Desktop\package
practice\ForEach\Output’ using connection “Load "Male"Output--Flat File Connection
Manager”
I-Converts Data type of Column "LoginID"---Data Conversion--->
Data Conversion Transformation is used to change the data type a column
In this package, I have changed data type of ‘LoginID’ Column to UNICODE STRING using
Data Conversion Transformation.
j-Extracts Name from 'LoginID' and changes modified date to recent Date--Derived
Column---->
Derived column Transformation is used to create a new column from existion data.
In this package, I have extracted ‘Name of Employee’ from ‘LoginID’ of employee using
SubString function ‘SUBSTRING(LoginID,17,LEN(LoginID)) () ‘and apart of that created a
new column ‘ Updated Date’ using function ‘(DT_DBTIMESTAMP2,3)GETDATE() ‘which
gives recent date when data is updated
K-Get No of Rows--Row Count--->
Row Count Transformation counts no of rows present in dataset using variables
In this package,’ GetNoOfRows’ variable is used to store no of rows present in dataset
L- Load Data to "employee_Details" Table---OLE DB Destination--->
‘OLEDB Destination‘ Task loads data to SQL Server Table
In this package, Data gets loaded to ‘[Nitil].[dbo].[Employee_Details]’ table. You can see in below image what data would get queried once you run the SELECT query.
3- Extract Name as resultset from Employee Details Table for Specific National ID---Execute SQL Task---
This is a ‘execute SQL Task ‘ which executes below query by getting value of Input Parameter(NID) and
gives result as ‘Name’ of Employee
select name from [Employee_Details] where [ NationalIDNumber] = ?
4. Display the Name of Employee--Script Task
It is script task which read ‘Name‘ of Employee and display it.
I mentioned VB Script below
Public Sub Main() Dim Name As String = Dts.Variables("Name").Value MsgBox("Name of Employee for National ID 998320692 is : " + Name) Dts.TaskResult = ScriptResults.Success End Sub
Apart of these I have Used 3 types of ‘event Handlers’ using ‘Execute SQL Task
Once package runs events are raised
1. OnError: this event Captures errors in Packages
In this package, I have created a table ‘PKG_Log’ with columns [ID],[PackageName],[StartTime],[EndTime],[ErrorMSG] so whenever package runs below query
will update the ‘PKG_Log’ table and give execution details.
Update PKG_LOg set ErrorMSG=?
EndTime=GETDATE()
where ID=?
Here ‘PKGID’ has fixed value as ‘101’ and mapped using execute SQL Task
2-Onprevaliadete—It Updates start Time of Package
T his event handler is for the OnPreValidate event. This event is raised by an executable
when its validation starts.
Once execution starts, It updates ‘PKG_LOG’ table using below query in execute SQL
Task. I already mapped ‘PKG ID ‘in execute SQl Task
Update PKG_LOg set StartTime=GetDate() where ID=?
3- OnPostValidate--- This event is raised by an executable when its validation is finished.
Once execution ends, It updates ‘PKG_LOG’ table using below query using execute SQL
Task. I already mapped ‘PKG ID ‘in execute SQl Task
Update PKG_LOg set ENDTime=GetDate() where ID=?
Now, this Sample package ends here. Hope It will help to get good idea about SSIS Tasks/Package.
Below you can find a small example of Script Task in SSIS
Sample : Using Script Task
1- I am going to set up a simple SSIS project. First I create 2 variables: MyName & YourName. I have scoped these at the packages level
2- After that I have dragged and dropped SCRIPT Task from “ SSIS Toolbox” to “Control Flow Pan “ which will be using a little bit of custom code
3- Now opening up the script task I have clicked on the button next to the readonlyvariables and readwritevariables areas. For t his sample, I am
setting up the MyName variable to be read only and the YourName variable to re ad-write.
Note :Read Only Variable is used to Read value using variable and Read Write Variable is used read and then write the value u sing
variable(Assigning or Changing value of variable)
4- Now click on Edit Script and make a call Using Visual Basic script, like below, to access your variables. Here I am going to display the values in some message boxes. Reading from the MyName variable and overwriting the YourName variable.
Public Sub Main()
Dim MyName As String = Dts.Variables("MyName").Value
MsgBox(MyName)
Dts.Variables("YourName").Value = "Tom"
Dim YourName As String = Dts.Variables("YourName").Value
MsgBox(YourName)
Dts.TaskResult = ScriptResults.Success
End Sub
5- After writing the script, click ok on script task editorand execute the task by clicking on Green mark
We will see output like below
In this output we can see MyName variable reads the name as “ Nitil” and yourName variable change name from “ Ritesh” to “ Tom”