0

我正在开发一个知识非常有限的 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 at Populate Data, Execute SQL Task: Executing the query "INSERT INTO [dbo].[xxxx] ( [field1], [Perso..." failed with the following error:"错误将结果提取到类型为 (DBTYPE_STR) 的变量时发生。可能的失败原因:查询有问题、“ResultSet”属性设置不正确、参数设置不正确或连接未正确建立。

4

1 回答 1

3

执行 SQL 任务很好,但对于您的情况,听起来数据流就足够了。

删除现有的东西并将数据流拖到控制流上。双击数据流并添加一个 OLE DB 源和一个 OLE DB 目标。

在您的 OLE DB 源中,将 OLE DB 连接管理器更改为您的源连接的名称。将“数据访问模式”从 更改Table or ViewSQL 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 选项卡。它应该根据名称匹配自动映射。按预期检查并验证事物映射。点击确定

保存,它应该可以工作。

于 2013-01-25T22:39:48.993 回答