Reputation: 15
I'm new to SSIS, so any help, suggestions, advice and guidance will be much appreciated. Thanks.
THE SCENARIO
I'm trying to convert a DTS package to an SSIS Package. My package contains a Data Flow task that pumps data from an OLE DB connection to a Flat File destination.
THE PROBLEM
The data in the flat file needs to be arranged in a certain way (eg: spacing), So how do I do that? Is there any data transformation tool that will help me achieve this? If so how would it be done?
THE DTS CODE (to put things in perspective)
'*************************************** ' Visual Basic ActiveX Script '*****************************************
DO WHILE NOT rsGetActivations.eof OR rsGetActivations.BOF
sLineItem = Space(10)
sLineItem = sLineItem & Space(10)
sLineItem = sLineItem & Space(10)
sLineItem = sLineItem & Replace(Space(8)," ","0")
sLineItem = sLineItem & Space(1)
sLineItem = sLineItem & Replace(Space(8)," ","0")
sLineItem = sLineItem & Replace(Space(3)," ","0")
sLineItem = sLineItem & Space(2)
sLineItem = sLineItem & rsGetActivations("Data_Date") & Space( 8 - Len( rsGetActivations("Data_Date") ) )
sLineItem = sLineItem & rsGetActivations("ID_Number") & Space( 16 - Len( rsGetActivations("ID_Number") ) )
sLineItem = sLineItem & Space(4)
sLineItem = sLineItem & rsGetActivations("Main_Name") & Space( 25 - Len( rsGetActivations("Main_Name") ) )
sLineItem = sLineItem & rsGetActivations("First_Name") & Space( 15 - Len( rsGetActivations("First_Name") ) )
sLineItem = sLineItem & rsGetActivations("Middle_Name") & Space( 15 - Len( rsGetActivations("Middle_Name") ) )
sLineItem = sLineItem & rsGetActivations("Third_Name") & Space( 15 - Len( rsGetActivations("Third_Name") ) )
sLineItem = sLineItem & rsGetActivations("DOB") & Space( 8 - Len( rsGetActivations("DOB") ) )
sLineItem = sLineItem & rsGetActivations("ID_Number") & Space( 13 - Len( rsGetActivations("ID_Number") ) )
sLineItem = sLineItem & rsGetActivations("Non_RSA_ID") & Space( 16 - Len( rsGetActivations("Non_RSA_ID") ) )
sLineItem = sLineItem & Space(15)
sLineItem = sLineItem & Space(15)
sLineItem = sLineItem & Space(15)
sLineItem = sLineItem & Space(15)
sLineItem = sLineItem & rsGetActivations("Gender") & Space( 1 - Len( rsGetActivations("Gender") ) )
sLineItem = sLineItem & Space(3)
sLineItem = sLineItem & Space(1)
sLineItem = sLineItem & Space(15)
sLineItem = sLineItem & Space(15)
sLineItem = sLineItem & Space(40)
sLineItem = sLineItem & "0"
sLineItem = sLineItem & rsGetActivations("Res_Line1") & Space( 30 - Len( rsGetActivations("Res_Line1") ) )
sLineItem = sLineItem & rsGetActivations("Res_Line2") & Space( 30 - Len( rsGetActivations("Res_Line2") ) )
sLineItem = sLineItem & rsGetActivations("Res_Line3") & Space( 30 - Len( rsGetActivations("Res_Line3") ) )
sLineItem = sLineItem & rsGetActivations("Res_Line4") & Space( 30 - Len( rsGetActivations("Res_Line4") ) )
sLineItem = sLineItem & rsGetActivations("Res_Postal") & Space( 6 - Len( rsGetActivations("Res_Postal") ) )
sLineItem = sLineItem & Space(1)
sLineItem = sLineItem & "00"
sLineItem = sLineItem & Space(1)
sLineItem = sLineItem & rsGetActivations("Post_Line1") & Space( 30 - Len( rsGetActivations("Post_Line1") ) )
sLineItem = sLineItem & rsGetActivations("Post_Line2") & Space( 30 - Len( rsGetActivations("Post_Line2") ) )
sLineItem = sLineItem & rsGetActivations("Post_Line3") & Space( 30 - Len( rsGetActivations("Post_Line3") ) )
sLineItem = sLineItem & rsGetActivations("Post_Line4") & Space( 30 - Len( rsGetActivations("Post_Line4") ) )
sLineItem = sLineItem & rsGetActivations("Post_Postal") & Space( 6 - Len( rsGetActivations("Post_Postal") ) )
sLineItem = sLineItem & Space(1)
sLineItem = sLineItem & "00"
sLineItem = sLineItem & rsGetActivations("Bank_Name") & Space( 20 - Len( rsGetActivations("Bank_Name") ) )
sLineItem = sLineItem & rsGetActivations("Bank_Branch") & Space( 20 - Len( rsGetActivations("Bank_Branch") ) )
sLineItem = sLineItem & Space( 6 - Len( rsGetActivations("Branch_No") ) ) & rsGetActivations("Branch_No")
sLineItem = sLineItem & Space( 15 - Len( rsGetActivations("Account_No") ) ) & rsGetActivations("Account_No")
sLineItem = sLineItem & rsGetActivations("Home_Code") & Space( 11 - Len( rsGetActivations("Home_Code") ) )
sLineItem = sLineItem & rsGetActivations("Home_Tel") & Space( 15 - Len( rsGetActivations("Home_Tel") ) )
sLineItem = sLineItem & rsGetActivations("Work_Code") & Space( 11 - Len( rsGetActivations("Work_Code") ) )
sLineItem = sLineItem & rsGetActivations("Work_Tel") & Space( 15 - Len( rsGetActivations("Work_Tel") ) )
sLineItem = sLineItem & rsGetActivations("Cell_No") & Space( 10 - Len( rsGetActivations("Cell_No") ) )
sLineItem = sLineItem & Space(35)
sLineItem = sLineItem & rsGetActivations("Occupation") & Space( 22 - Len( rsGetActivations("Occupation") ) )
sLineItem = sLineItem & rsGetActivations("Emp_Name") & Space( 35 - Len( rsGetActivations("Emp_Name") ) )
sLineItem = sLineItem & Space(2)
sLineItem = sLineItem & Space(6)
fExportFile.Write( sLineItem & sCRLF )
rsGetActivations.MoveNext
LOOP'//end WHILE NOT rsGetActivations.eof OR rsGetActivations.BOF
Upvotes: 0
Views: 758
Reputation: 61211
I sure don't miss DTS...
What you're looking for in SSIS is a Flat File Connection Manager and specify it's Fixed Width (define the columns in Advanced). Beautiful thing about letting the connection manager determine size is you set it once and that's it, no off-by-one errors in the output because you flubbed the logic. not that I've ever done that
General tab
Columns tab
Advanced tab
The Data Flow would look something like
The only thing I'm not sure about is the 0 padded columns. You might need to work with a derived column to fill those in but it shouldn't be too bad---just pad the column size of zeros and take the right N characters with the usual NULL concatenation rules to be wary of.
Upvotes: 0