【问题标题】:How I can create a column using script component in SSIS?如何在 SSIS 中使用脚本组件创建列?
【发布时间】:2016-12-13 16:33:24
【问题描述】:

我有以下情况: 我需要在 SSIS 中创建一个项目以将一些数据从 csv 导入我们的系统,但为此我必须读取一些列,其中一个列是值的“组”。 计划范围的值和这个范围可以改变每个过程,所以一些过程可能是 5 个月,而另一些可能是 15 个月。

文件 (csv) 将始终填充 21 列,但在 (22, 23...) 之后我不知道是 1、2 还是更多列(水平)。

在这种情况下,我无法在脚本转换编辑的“输入和列”中创建列,我需要根据地平线的长度进行创建。

所以,当我发现地平线的长度时,我的问题是否可以在运行时创建一个列。

问候

【问题讨论】:

  • 简短回答:不,您不能在运行时在 SSIS 中创建列。如果目标中的列数发生变化,您将需要刷新元数据。或者,您可以使用 COMMAND 目标为每一行运行 INSERT 语句或存储过程,但这会影响您的性能。

标签: c# sql-server ssis ssis-2008


【解决方案1】:

SSIS 不是这样工作的。列数在设计时设置。

如果您可以设置一个合理的上限 - 比如 50 列,您可以读取最后“列”数据,然后通过脚本组件将其解析到这些字段中。否则,您正在考虑预处理文件以将可变宽度行还原为规范化集。

【讨论】:

    【解决方案2】:

    您可以通过两种不同的方式做到这一点。

    1. 将列添加到脚本组件 https://msdn.microsoft.com/en-us/library/ms188192.aspx

    2. 添加派生列转换并使用适当的表达式添加自定义列。

    【讨论】:

    • 这回答了我的问题,导致我写了这篇文章。这是如何使用脚本组件添加列。只需在 Output0 中添加一列。在 Input0_ProcessInputRow 方法中,将所需的值分配给列。我特别必须创建一个在 sql 中太复杂而无法执行的字符串。
    【解决方案3】:

    感谢所有答案。我改变了我的愿景来创造不同的东西。 我使用脚本转换来检查:

    1. 我需要创建多少列;
    2. 打开连接并删除地平线列;
    3. 基于新视野再次创建列;

    在我包含一个执行 Sql 任务来调用一个过程来执行所有逻辑来填充列之后。

    问候,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多