我试图找出一种方法,使用SSIS将1个字段解析为8个不同的字段。我打开了C#解决方案或VB解决方案。我想出了一种在SQL Server中实现它的方法,但由于我的团队现在在SSIS中做了很多事情,我希望有一个SSIS解决方案来保持简化和高效。我在网上找了一个选项,在下面的链接中。
Split a single column of data with comma delimiters into multiple columns in SSIS
我不确定它是如何工作的,如果它工作的话。我的示例数据如下所示:Purchase | 345 | USD | GT | TF456577 | DG | 125 | KTMDC
我可以有0到7个管道字符,所以我需要将一个字段分成最多八个字段。我很感激任何帮助。感谢。
哈迪,我正在进行一些小编辑。你能看一下屏幕截图并告诉我这里有什么问题吗?另外,我从未找到DT-STR
选项。也许这就是问题所在。
答案 0 :(得分:1)
您可以使用脚本组件
执行此操作 在这个答案中,我将假设数据源是一个SQL Server表,其中一列Column0
在Integration Service包中,请按照下列步骤操作:
Data Flow Task
Data Flow Task
添加OLEDB Source
并选择包含您需要拆分的列的表Script Component
(将其类型设置为转换) OLEDB Source
连接到脚本组件Script Component
选择Column0
作为输入Output0
添加8列(例如:outColumn0, outColumn1 ... outColumn8
) DT-STR
数据类型在“脚本”窗口中,编写以下脚本:
Imports System.Linq
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.Column0_IsNull AndAlso
Not String.IsNullOrEmpty(Row.Column0.Trim) Then
Dim strColumn As String = Row.Column0
Dim intVerticalBarCount As Integer
intVerticalBarCount = strColumn.Count(Function(x) x = CChar("|"))
If intVerticalBarCount <= 8 Then strColumn = strColumn & "".PadRight((8 - intVerticalBarCount), CChar("|"))
Dim strOutputColumns As String() = strColumn.Split(CChar("|"))
Row.outColumn0 = strOutputColumns(0)
Row.outColumn1 = strOutputColumns(1)
Row.outColumn2 = strOutputColumns(2)
Row.outColumn3 = strOutputColumns(3)
Row.outColumn4 = strOutputColumns(4)
Row.outColumn5 = strOutputColumns(5)
Row.outColumn6 = strOutputColumns(6)
Row.outColumn7 = strOutputColumns(7)
Else
Row.outColumn0_IsNull = True
Row.outColumn1_IsNull = True
Row.outColumn2_IsNull = True
Row.outColumn3_IsNull = True
Row.outColumn4_IsNull = True
Row.outColumn5_IsNull = True
Row.outColumn6_IsNull = True
Row.outColumn7_IsNull = True
End If
End Sub
在下面的代码中,首先我们得到列中垂直条|
的出现次数,如果它小于8,我们添加缺少的垂直条,然后我们拆分列并分配它到输出列