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

Sea*_*her 4 sql-server ssis

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

pra*_*een 5

从Northwind取的例子

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

       Customer_ID as string
       Order_Id as int   
Run Code Online (Sandbox Code Playgroud)

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

   Select top 10* from orders
Run Code Online (Sandbox Code Playgroud)

使用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)
 )
Run Code Online (Sandbox Code Playgroud)

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

拖动foreach循环.在集合中使用枚举器类型作为Foreach ADO枚举器在枚举器配置中选择user :: Result变量,它存储执行sql任务的前10行并选择单选按钮"第一个表中的行"在变量映射中,映射您在第一步中创建的列变量,索引将为0表示第一列,1表示第二列 在此输入图像描述

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

  Insert into myOrders( OrderID,CustomerID)
  values
  (?,?)
Run Code Online (Sandbox Code Playgroud)

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

  VariableName : OrderID  Direction : Input   DataType=Long ParamterName=0
  VariableName : CustomerID  Direction : Input   DataType=varchar ParamterName=1
Run Code Online (Sandbox Code Playgroud)