SSIS 使用带有变量而不是源数据库的 DataFlow 任务
Posted
技术标签:
【中文标题】SSIS 使用带有变量而不是源数据库的 DataFlow 任务【英文标题】:SSIS Use DataFlow task with variables instead of a source database 【发布时间】:2012-08-28 10:17:01 【问题描述】:我正在处理一项令我难过的任务。希望你能帮助我。我正在使用一个数据流任务,它基本上是将一行插入到 sqlite 表中。我正在使用“SQL 任务”执行此操作,但不幸的是,将 guid 成功插入 sqlite 表的唯一方法是使用数据流任务将其转换为字节流。我不想使用源数据库,因为我的数据没有从一个表流向另一个表。我真的只想获取我填充的变量并将它们转换为字节流,然后我可以成功地将其插入到 sqlite 数据库中。问题是,我不能在没有源数据库的情况下使用数据流任务。
到目前为止,我的解决方法是声明一个源数据库/表和一列(但从不在数据流中使用它)。这工作正常,我无法使用我的预设变量将该行插入到 sqlite 中,但是每次我这样做时,我的输出日志中都会留下一条有点烦人的消息:
警告:0x80047076,SSIS.Pipeline:输出“OLE DB 源输出”(11) 和组件“OLE DB 源”(1) 上的输出列“”(117) 随后未在数据流任务中使用.删除这个未使用的输出列可以提高数据流任务的性能。
有谁知道让这个警告不出现的好方法吗?
【问题讨论】:
不要使用 OLE-DB 组件,而是使用脚本组件作为源。 【参考方案1】:在您的数据流中选择一个脚本组件。
当提示选择源、目标或转换时,选择源。
将预先填充的变量添加到脚本选项卡的 CustomProperties.ReadOnlyVariables 部分。
转到输入和输出部分。
在每个变量的默认输出中添加一列。
在您的脚本(如果使用 C#)中,在 CreateNewOutputRows() 部分中添加类似于以下内容的内容
Output0Buffer.AddRow();
Output0Buffer.ContainerName = Variables.ContainerName;
Output0Buffer.TaskName = Variables.TaskName;
Output0Buffer.TaskStartDate = Variables.ContainerStartTime;
保存您的脚本。
将您的脚本组件连接到您的目标对象。
【讨论】:
谢谢威廉。我不知道脚本组件可以用作源。我认为只有数据流源是我可用的选项。 这对我来说第一次非常有用,但随后的执行(ForEach 中的数据流任务),变量没有改变!我在这个脚本中将它们设置为只读,但在之前的脚本中它们是 ReadWrite。将它们更改为 ReadWrite 会使脚本组件失败。这种技术可以重复使用吗? 忽略之前的评论 - 我是 NOB,因为我在返回静态值的变量中有一个表达式...【参考方案2】:如果这导致您的包执行失败,您可以选择忽略这些警告/错误。
只需双击数据流中的源块并导航到左侧窗格中的最后一个选项卡(“错误输出”),您需要选择忽略错误的选项。 (我不知道该选项中的哪个短语会做到这一点)
【讨论】:
以上是关于SSIS 使用带有变量而不是源数据库的 DataFlow 任务的主要内容,如果未能解决你的问题,请参考以下文章