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

时间:2012-05-30 04:56:33

标签: sql-server ssis

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

2 个答案:

答案 0 :(得分: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行,并选择单选按钮“第一个表中的行” 在变量映射中,映射您在第一步中创建的列变量,索引将为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

答案 1 :(得分:2)

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

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

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

enter image description here

并像这样配置你的foreach循环容器:

enter image description here enter image description here

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