【问题标题】:Write into Excel Destination from SSIS variables从 SSIS 变量写入 Excel 目标
【发布时间】:2018-06-27 10:16:31
【问题描述】:

我有 3 个 SSIS 变量,即 姓名、年龄、性别,并设置了初始值。我想将这些值连续写入 excel 工作表。稍后我会将其扩展到记录数组。

为此,我创建了 Excel 连接,并将 Excel 表附加到我要写入的位置。

我添加了控制流任务并双击,然后添加了 派生列 组件来为上述 3 个变量中的每一个创建派生列。在派生列编辑器中,我选择了上述变量作为新的派生列。

然后流水线化 excel 目标组件并将工作表列映射到派生列。我执行了 SSIS 包并成功。但是变量不会写入excel表。

我做错了什么?

【问题讨论】:

  • 您在此数据流中的数据源是什么?数据行来自哪里?
  • 我没有数据源组件,数据存在于 SSIS 变量中
  • 我相信您需要一个源组件,以便行从那里开始流程。派生列用于应用转换或添加新列,但不是全新的行。执行后,您能看到派生列和 Excel 目标之间的链接中的行数吗?如果不是,则为 0 行。
  • 我添加了数据查看器,它没有显示任何内容,只有绿色勾号
  • 添加了一个使用脚本组件作为源@EzLo 的新答案

标签: ssis


【解决方案1】:

同样,您需要一个来源。我给了你一个“简单”的解决方案。这可能是您问题的最佳解决方案:

这一次源将是一个脚本组件(选择源)。

添加脚本组件后的步骤:

  1. 选择来源
  2. 转到输入和输出
  3. 添加您的输出列(不要忘记数据类型)

  1. 返回脚本
  2. 添加变量(性别、姓名和年龄)

  1. 进入脚本
  2. 添加以下代码

    public override void CreateNewOutputRows()
    {
       Output0Buffer.AddRow();
       Output0Buffer.Age = Variables.Age;
       Output0Buffer.Gender = Variables.Gender;
       Output0Buffer.Name = Variables.Name;
    }
    

【讨论】:

  • 在子弹后面加代码时,你需要识别它两次(不知道为什么)。这应该是 OP 的解决方案。
【解决方案2】:

你需要一个来源。 最简单的是使用 SQL 连接。

使用名为 SQL 的字符串类型变量。

Set SQL = "Select '" + name+ "' as name,"+ age + "as age,'" + gender + "' as Gender

将源设置为 SQL 变量。

将此源​​连接到目标,您应该有 1 行 3 列

【讨论】:

  • 您可能不得不在字符串周围使用单引号。
  • 这可行,但使用您并不真正需要的连接不是一个好主意。
  • 我不想在脚本任务中完成这项工作,而我本来会这样做。
  • 工作无聊,提供脚本组件解决方案
【解决方案3】:

按照 @KeithL

的建议清楚地列出步骤
  1. 使用 string 数据类型创建一个 SSIS 变量 selectQueryVariables
  2. 将变量表达式赋值为

    "SELECT '"+@[User::name]+"' as Name,'"+@[User::gender]+"' as Gender,"+(DT_WSTR,4 )@[User::age]+" as Age"
    
  3. 添加OLE DB Source组件并将数据访问模式设置为SQL command from variable并在下拉列表中选择变量selectQueryVariables。现在源已准备好包含 3 列名称、年龄和性别。

  4. 使用 Excel 目标 进行管道化,并映射列源和目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2011-01-18
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多