【问题标题】:SSIS insert from objectSSIS 从对象插入
【发布时间】:2013-01-26 06:39:48
【问题描述】:

我正在开发一个知识非常有限的 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”属性设置不正确、参数设置不正确或连接未正确建立。

【问题讨论】:

  • 我知道您说“知识非常有限”,但是您是否有意识地决定为什么将数据加载到对象中然后遍历它们?
  • 我正在学习一个教程:simple-talk.com/sql/ssis/…。如果有更好的方法,请告诉我。
  • 您要解决什么问题?您只是想将数据从该视图移动到某个表吗?

标签: ssis


【解决方案1】:

执行 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 选项卡。它应该根据名称匹配自动映射。按预期检查并验证事物映射。点击确定

保存,它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2022-07-07
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多