Question

I'm using SSIS to import data from Excel sheets into SQL Server 2005, the data contains some columns with data that should have the value of the previous non-empty cell in the same column, it looks like this:

2005 | 15 | Something1
     | 12 | Something2
     | 14 | Something3
2006 | 10 | Something4
     |  2 | Something5
     | 18 | Something6
     | 15 | Something7

It should fill-in 2005 and 2006, but all I could get is nulls. Can I put this field's value in a variable if it's not null, and use it to replace the null values that come after it?

Was it helpful?

Solution

You'll have to use a Script Component in the Data Flow and go through each row, using a variable to hold the last known value.

Update: Here's the code. I did this in VB in SSIS 2008, so there may be some editing you have to do (for example, you may have to use Dts.Variables["User::LastYear"].Value.ToInt32() instead of Variables.LastYear--I can't remember off the top of my head):

Dim LastYear As Integer

Public Overrides Sub PreExecute()
    MyBase.PreExecute()
    LastYear = 0
End Sub

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
    If Row.year_IsNull Then
        Row.year = LastYear
    Else
        LastYear = Row.year
    End If
End Sub

Hopefully, this helps!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top