首页 文章

如何使用ssis将检索到的行插入另一个表中

提问于
浏览
4

我有一张 table ,它有500行 . 我想只检索10行,我想只使用控制流插入另一个表 . 通过数据流任务我们可以使用OLEDB源和OLEDB目的地 . 但我希望通过使用执行sql任务和每个循环的方式得到结果 . 有可能这样做吗?我的想法是,获取十个记录的集合,并通过使用foreach循环迭代到每一行并使用execute sql task插入到表中 . 目标表需要动态创建 . 我尝试了一些方法,但没有走向 . 请找到图像文件 .
enter image description here

2 回答

  • 5

    从Northwind取的例子

    创建变量(在变量集合中),表示将在运行时创建的表中的列示例: -

    Customer_ID as string
           Order_Id as int
    

    然后你需要创建执行SQL任务并编写以下查询来选择前10行

    Select top 10* from orders
    

    使用FullResultSet并在Result Set配置中将表行存储在variableName中: - User :: Result ResultName:0

    删除一个执行SQL任务并在运行中创建一个表

    IF OBJECT_ID('myOrders') IS not NULL
     drop table myOrders
    
     Create table myOrders
     (OrderID  int,
      CustomerID varchar(50)
     )
    

    合并来自Execute sql任务的2个流并将其连接到Foreach循环

    拖动foreach循环 . 在集合中使用枚举器类型作为Foreach ADO枚举器在枚举器配置中选择user :: Result变量,它存储执行sql任务的前10行并选择单选按钮" Rows in the first table"在变量映射中,映射列变量u已在第一步中创建,索引将为0表示第一列,1表示第二列
    enter image description here

    在foreach循环中拖动执行sql任务并编写以下查询:

    Insert into myOrders( OrderID,CustomerID)
      values
      (?,?)
    

    在execute sql task中使用参数映射配置映射参数

    VariableName : OrderID  Direction : Input   DataType=Long ParamterName=0
      VariableName : CustomerID  Direction : Input   DataType=varchar ParamterName=1
    
  • 2

    我希望你在“学习模式”上这样做 . 没有理由在数据流的控制流上执行此操作 .

    无论如何,你的打印屏幕是正确的,我只是在开始时添加另一个执行sql任务来创建你的目标表 .

    然后,执行sql任务应该有查询带来你想要的10行,它的结果集应该设置为“完整结果集”,在结果集选项卡上你应该将结果集映射到这样的变量:

    enter image description here

    并配置你的foreach循环容器,如下所示:

    enter image description here

    enter image description here

    在foreach的每个循环上,您将可以访问变量的值,然后您可以使用另一个execute sql任务在新的crated表上插入

相关问题