【问题标题】:Iterating columns of SQL Server table with loop in Visual Studio SSIS在 Visual Studio SSIS 中使用循环迭代 SQL Server 表的列
【发布时间】:2017-11-21 01:45:06
【问题描述】:

我正在使用 Visual Studio 构建一个简单的 SSIS 项目,该项目需要将标准化列从数百个平面文件复制到它们各自的行到 SQL Server 表中。

所有平面文件都具有相同的格式,并按字母顺序放置到一个文件夹中,该文件夹循环遍历,每个文件的一列复制到 SQL Server 表的下一个可用列中。

循环过程遵循this guide. 其结果旨在如下工作:

file_1 
---------------------
col_1  col_2   col_3
-----  -----   -----
1      a       d
2      b       e
3      c       f

file_2 
---------------------
col_1  col_2   col_3
-----  -----   ------
1      g       j
2      h       k
3      i       l

Table_1
-------------------------------
col_1   file1_Col2   file2_col2
-----   ----------   ----------
 1         a             g
 2         b             h
 3         c             i

问题在于如何将每个平面文件的同一列映射到 SQL Server 表的下一列。我想知道是否可以创建一个可以用作指向下一列的指针的字符串变量,或者是否有可以调整的属性来实现这种效果?

【问题讨论】:

    标签: sql-server ssis etl flat-file ssis-2017


    【解决方案1】:

    你可以做一个解决方法来实现这一点:

    1. 在 foreach 循环容器中添加数据流任务
    2. 在 DataFlow 任务中添加平面文件源、OLE DB 目标(如您提供的链接中所述)
    3. 在源和目标之间添加脚本组件
    4. 在脚本组件中,您必须选择 Column9 作为输入
    5. 在输入和输出选项卡中,在 Output0 中添加输出列(您必须添加在目标表中找到的所有列)
    6. 在只读变量中添加包含文件名的变量
    7. 在 PreExecute Phase 的脚本组件中,从 ssis 变量中读取文件名并获取文件编号(即 if file2 then number =2))
    8. 将值动态分配给脚本输出列(按照我的回答@@How can I loop though columns by name in an SSIS Script component?
    9. 将所有输出列映射到目标中的相关列

    注意:这将为每个文件创建多行:

    Table_1
    -------------------------------
    col_1   file1_Col2   file2_col2
    -----   ----------   ----------
    1        a        
    2        b        
    3        c        
    1                      g
    2                      h
    3                      i
    

    所以它需要将所有数据导入到一个临时表中,然后在所有文件导入后你必须将数据插入到目标表中:

    首先插入仅包含 col1 值的行,然后更新表中值不为空的行。

    【讨论】:

      【解决方案2】:

      如果你使用循环容器来遍历文件,你可以

      1. 使用表达式任务设置具有列名和最后一个值的变量
      2. 创建数据流并在其中创建 ADO.Net 目标
      3. 在数据流属性中,您可以使用表达式来传递查询 - 该属性将被称为 [Name Of Your Ado.Net].[SqlCommand] 并且值将是您的插入语句与变量的连接

      希望不要太抽象

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多