我正在尝试在 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/尽管我想尝试一种动态方法。
最佳答案
您的问题是尝试对数据库中的 NULL 值运行 ToString()。
请尝试使用 Convert.ToString(columnValue),它只会返回一个空字符串。
关于vb.net - SSIS 自定义脚本 : loop over columns to concatenate values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11216694/