SSIS 2008で、選択した入力列をループして連結し、SHA1ハッシュの作成に使用できるカスタムスクリプトを作成しようとしています。利用可能なカスタムコンポーネントを知っていますが、職場のシステムにインストールできません。
ここで紹介した例は正常に機能しているように見えますがhttp://www.sqlservercentral.com/articles/Integration+Services+(SSIS)/69766/これをテストしたところ、すべてではなく少数の列を選択しただけで、奇妙な結果が得られました。スクリプトは、選択した列が順番に並んでいる場合にのみ機能するようです。それらが順番に並んでいる場合でも、非常に多くのレコードまたはおそらく次のバッファの後で、テストデータ全体で行がまったく同じであるにもかかわらず、異なるMD5ハッシュが生成されます。
私はこれらの記事と一緒に前のリンクからのコードを適応させようとしましたが、これまでのところ喜びがありませんでした。
http://msdn.microsoft.com/en-us/library/ms136020.aspx
http://agilebi.com/jwelch/2007/06/03/xml-transformations-part-2/
開始点として、これは入力として使用するために選択した列名を表示するために正常に機能します
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
For Each inputColumn As IDTSInputColumn100 In Me.ComponentMetaData.InputCollection(0).InputColumnCollection
MsgBox(inputColumn.Name)
Next
End Sub
これに基づいて、以下のコードを使用して値を取得しようとします。
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
Dim column As IDTSInputColumn100
Dim rowType As Type = Row.GetType()
Dim columnValue As PropertyInfo
Dim testString As String = ""
For Each column In Me.ComponentMetaData.InputCollection(0).InputColumnCollection
columnValue = rowType.GetProperty(column.Name)
testString += columnValue.GetValue(Row, Nothing).ToString()
Next
MsgBox(testString)
End Sub
残念ながら、これは機能せず、次のエラーが発生します。
VB.net、特にSSISのVB.netに関する知識は限られていますが、私がやろうとしていることは簡単に達成できると確信しています。動的な方法を試してみたいのですが、ここhttp://timlaqua.com/2012/02/slowly-changing-dimensions-with-md5-hashes-in-ssis/に示すように、列名を個別に定義できます。