wtorek, 11 września 2012
SSIS Script Component Transformation: Split record into multiple records (ver. dynamic columns)
'... Output has to be created manually (there's no solution for that) and column mappings
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports System.Reflection
Imports Microsoft.SqlServer.Dts.Pipeline
_
_
Public Class ScriptMain
Inherits UserComponent
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
Dim column As IDTSInputColumn100
Dim rowType As Type = Row.GetType()
Dim columnValue As PropertyInfo
Dim rok As Integer
Dim colName As String
Dim reg As String
Dim arr() As String
Dim farr As New DataTable()
Dim ds As New DataSet()
Dim i As Integer = 0
Dim j As Decimal = 0 '= Nothing
Dim id As New DataColumn("qtr", GetType(Integer))
ds.Tables.Add(farr)
farr.Columns.Add(id)
farr.Rows.Add(1)
farr.Rows.Add(2)
farr.Rows.Add(3)
farr.Rows.Add(4)
farr.PrimaryKey = New DataColumn() {id}
'If Not farr.Columns.Contains(column.Name) Then
' farr.Columns.Add(colName)
' MessageBox.Show("Dodana kolumna:" + colName)
'End If
For Each column In Me.ComponentMetaData.InputCollection(0).InputColumnCollection()
colName = column.Name.ToString()
columnValue = rowType.GetProperty(column.Name)
If colName = "rok" Then
rok = columnValue.GetValue(Row, Nothing)
ElseIf colName = "regon" Then
reg = columnValue.GetValue(Row, Nothing)
Else
i = 0
Dim dt As DataTable = ds.Tables.Add(colName)
Dim id1 As New DataColumn("qtr", GetType(Integer))
dt.Columns.Add(id1)
'dt.PrimaryKey = New DataColumn() {id1}
Dim var As New DataColumn(colName, GetType(String))
dt.Columns.Add(var)
arr = columnValue.GetValue(Row, Nothing).ToString.Split(";")
For Each s In arr
i = i + 1
'Try
' j = Convert.ToDecimal(s)
'Catch 'ex As Exception
' j = 0
'End Try
'With farr.Columns(colName)
dt.Rows.Add(i, s)
'End With
Next
ReDim arr(0)
farr.Columns.Add(colName, GetType(String))
'MessageBox.Show("nazwa kol " + colName)
'Dim rel As DataRelation = New DataRelation(colName, farr.Columns("qtr"), dt.Columns("qtr"))
'ds.Relations.Add(rel)
For Each chi As DataRow In dt.Rows
For Each par As DataRow In farr.Rows
If par("qtr") = chi("qtr") Then
'MessageBox.Show(colName + " col0: " + dt.Columns(0).ColumnName + " q: " + chi(0).ToString() + " val: " + chi(1).ToString())
par.Item(colName) = chi(colName)
'farr.Rows.Add(pr)
'MessageBox.Show(colName)
End If
Next
Next
dt.Clear()
End If
Next
'For Each dtt As DataTable In ds.Tables
' farr.Merge(dtt)
'Next
For Each r As DataRow In farr.Rows
'MessageBox.Show("Next column")
Output0Buffer.AddRow()
Output0Buffer.regon = reg
Output0Buffer.rok = rok
Output0Buffer.nnk = r.Item("nnk")
Output0Buffer.nno = r.Item("nno")
Output0Buffer.nnp = r.Item("nnp")
Output0Buffer.nnw = r.Item("nnw")
Output0Buffer.nbk = r.Item("nbk")
Output0Buffer.nbo = r.Item("nbo")
Output0Buffer.nbp = r.Item("nbp")
Output0Buffer.nbw = r.Item("nbw")
Output0Buffer.nnp = r.Item("nnp")
Output0Buffer.nnw = r.Item("nnw")
Output0Buffer.pnk = r.Item("pnk")
Output0Buffer.pno = r.Item("pno")
Output0Buffer.pnp = r.Item("pnp")
Output0Buffer.pnw = r.Item("pnw")
Output0Buffer.zw1 = r.Item("zw1")
Output0Buffer.zw2 = r.Item("zw2")
Output0Buffer.zw3 = r.Item("zw3")
Output0Buffer.zw4 = r.Item("zw4")
Output0Buffer.zw5 = r.Item("zw5")
Output0Buffer.zp1 = r.Item("zp1")
Output0Buffer.zp2 = r.Item("zp2")
Output0Buffer.zp3 = r.Item("zp3")
Output0Buffer.zp4 = r.Item("zp4")
Output0Buffer.zp5 = r.Item("zp5")
Output0Buffer.wzbk = r.Item("wzbk")
Output0Buffer.wzbr = r.Item("wzbr")
Output0Buffer.wzbz = r.Item("wzbz")
Output0Buffer.wznk = r.Item("wznk")
Output0Buffer.wznr = r.Item("wznr")
Output0Buffer.wznz = r.Item("wznz")
Output0Buffer.qtr = DateAdd("d", -1, DateSerial(rok, r.Item("qtr") * 3 + 1, 1))
Next
farr.Clear()
End Sub
End Class
Subskrybuj:
Komentarze do posta (Atom)
Brak komentarzy:
Prześlij komentarz