|
|
Question : DTS Transform Skip Row, loads no data
|
|
I have a fixed width file format which I need to load into SQL table (formatting it first). The final row of the file is a footer record containgin only the number of records contained therein for audit purposes. Here's an example file format:
10022237000005944+E15/09/2005 10047126000091362+E15/09/2005 10050400000001633-E15/09/2005 10108870000024422-E15/09/2005 10428947000003309+E15/09/2005 10433786000036697+E15/09/2005 10527663000023497+C15/09/2005 10553812000001158-E15/09/2005 10602188000003157+C15/09/2005 10634579000004887+C15/09/2005 T0000010
In the first steps of the package I do all sorts of initalising and parse the expected number of records from the footer. I then have a DTS Transform from the file to the SQL Destination as below.
'********************************************************************** ' Visual Basic Transformation Script '************************************************************************ Option Explicit
Const EP_LENGTH_YEAR = 4 Const EP_START_MONTH = 3 Const EP_LENGTH_MONTH = 2 Const EP_LENGTH_DAY = 2 Const EP_LENGTH_TRAILERID = 1
Function Main()
Dim xml Dim serviceAccount Dim debtAmount Dim billType Dim billDate Dim billYear Dim billMonth Dim billDay Dim trailerId
'Just Exist If DTSGlobalVariables("gvRecordsLoaded").Value = DTSGlobalVariables("gvRecordsExpected").Value - 1 Then Msgbox "Found footer - skipping row" Main = DTSTransformStat_SkipRow End If
'Parse the attributes into variables serviceAccount = DTSSource("Col001") debtAmount = DTSSource("Col003") & CLng( DTSSource("Col002") ) billType = DTSSource("Col004") billDate = DTSSource("Col005") billYear = Right(billDate , EP_LENGTH_YEAR) billMonth = Mid(billDate, EP_START_MONTH, EP_LENGTH_MONTH) billDay = Left(billDate, EP_LENGTH_DAY) 'Parse the attributes into an XML string xml = "" xml = xml & " xml = xml & " ServiceAccount=" & """" & serviceAccount & """" xml = xml & " Amount=" & """" & debtAmount & """" xml = xml & " Type=" & """" & billType & """" xml = xml & " Date=" & """" & billYear & "-" & billMonth & "-" & billDay & "T00:00:00" & """" xml = xml & "/>"
'Insert the source into the destination column DTSDestination("ep_task_id") = 0 DTSDestination("ep_task_xml") = xml ' Thes reference values are required for the job DTSDestination("ep_task_file_id") = DTSGlobalVariables("gvFileId").Value DTSDestination("ep_task_tast_id") = 23 DTSDestination("ep_task_rqst_id") = 100 DTSDestination("ep_task_status") = "Q"
' Increment the load counter DTSGlobalVariables("gvRecordsLoaded").Value = DTSGlobalVariables("gvRecordsLoaded").Value + 1
Main = DTSTransformStat_OK
End Function
The intended purpose of this transformation is to load all rows which are not the footer records. The script will debug and show me that the footer has been found and skip that row, however NO records are created in my destination table and no further errors are created.
This is an extremely urgent requirement and carries some hefty points.
|
Answer : DTS Transform Skip Row, loads no data
|
|
>>The script will debug and show me that the footer has been found and skip that row, however NO records are created in my destination table and no further errors are created.<< I would have expected exactly the opposite: All rows are added, including the footer. Reason for that is that you are setting: Main = DTSTransformStat_SkipRow
But then you re-set it at the end of the function to: Main = DTSTransformStat_OK
Which negates the first assignment. I suggest that when you figure out your problem, add "Exit Function" after "Main = DTSTransformStat_SkipRow" or use some other logic.
Also, rather than this: If DTSGlobalVariables("gvRecordsLoaded").Value = DTSGlobalVariables("gvRecordsExpected").Value - 1 Then
I would do this: If Left(DTSSource("Col001"), 1) = "T" Then
Finally, lose the MsgBox it will probably cause you grief in a scheduled (unattended) job.
|
|
|
|
|