我正在研究一个知识非常有限的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”属性设置不正确,参数设置不正确或连接未正确建立。
答案 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选项卡。它应该基于名称匹配自动映射。通过并按预期验证事物地图。单击“确定”
保存,它应该可以工作。