根据分隔符

时间:2017-11-11 13:00:14

标签: sql-server vb.net ssis etl ssis-2012

我试图找出一种方法,使用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个管道字符,所以我需要将一个字段分成最多八个字段。我很感激任何帮助。感谢。

enter image description here

哈迪,我正在进行一些小编辑。你能看一下屏幕截图并告诉我这里有什么问题吗?另外,我从未找到DT-STR选项。也许这就是问题所在。

1 个答案:

答案 0 :(得分:1)

您可以使用脚本组件

执行此操作

在这个答案中,我将假设数据源是一个SQL Server表,其中一列Column0

在Integration Service包中,请按照下列步骤操作:

  1. 添加Data Flow Task
  2. 创建OLEDB连接管理器并进行配置
  3. Data Flow Task添加OLEDB Source并选择包含您需要拆分的列的表
  4. 添加Script Component (将其类型设置为转换)
  5. OLEDB Source连接到脚本组件
  6. 将脚本语言更改为Visual Basic
  7. Script Component选择Column0作为输入
  8. 转到输入输出标签
  9. Output0 添加8列(例如:outColumn0, outColumn1 ... outColumn8 DT-STR数据类型
  10. 在“脚本”窗口中,编写以下脚本:

    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
    
  11. 在下面的代码中,首先我们得到列中垂直条|的出现次数,如果它小于8,我们添加缺少的垂直条,然后我们拆分列并分配它到输出列