SSIS从对象插入

时间:2013-01-25 21:44:14

标签: ssis

我正在研究一个知识非常有限的SSIS包。我有一个“执行SQL任务”,从视图中检索大约300行。我将结果集放入employeeList对象。

我的下一步是将这些记录插入表中。我尝试创建一个ForEach循环容器并将我的“执行SQL任务”放入此容器中。我的参数映射是:

variable name      | direction | datatype| parameter name | parameter size 

User::employeeList | input     | varchar | 0  | -1.
User::employeeList | input     | varchar | 1  | -1.
User::employeeList | input     | varchar | 2  | -1.
User::employeeList | input     | varchar | 1  | -1.

...

我得到的错误是:错误:0xC002F210填充数据,执行SQL任务:执行查询“INSERT INTO [dbo]。[xxxx]([field1],[Perso ...]失败,出现以下错误: “将结果提取到类型的变量(DBTYPE_STR)时发生错误”。可能的失败原因:查询问题,“ResultSet”属性设置不正确,参数设置不正确或连接未正确建立。

1 个答案:

答案 0 :(得分:3)

执行SQL任务很好但很花哨但是对于你的情况,听起来像Data Flow就足够了。

删除现有内容并将数据流拖到控制流上。双击数据流并添加OLE DB源和OLE DB目标。

在OLE DB源中,将OLE DB连接管理器更改为源连接的名称。将“数据访问模式”从Table or View更改为SQL Command。前者更易于点击,但与编写等效的SELECT * FROM mytable相比,会产生轻微的性能开销。在不再灰色的窗口中,放置您的查询。

SELECT column1, column2, ... FROM dbo.MyView

一般来说,您应该枚举所需的所有列。拉回你不需要浪费内存的列,这就是SSIS快速的原因。

将绿色箭头从源连接到“OLE DB目标”。双击它并将OLE DB连接管理器更改为目标数据库连接。在那里,将数据访问模式更改为Table or view - fast load。这允许我们批量加载数据,而默认的Table or view为流过的每一行发出一个插入,这很慢。在下拉列表中找到目标表名称dbo.xxxx,然后然后单击Mappings选项卡。它应该基于名称匹配自动映射。通过并按预期验证事物地图。单击“确定”

保存,它应该可以工作。