5

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

4

2 回答 2

6

取自 Northwind 的示例

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

       Customer_ID as string
       Order_Id as int   

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

   Select top 10* from orders

使用 FullResultSet 并在结果集配置中将表行存储在 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 在此处输入图像描述

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

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

在执行sql任务中使用参数映射配置映射参数

  VariableName : OrderID  Direction : Input   DataType=Long ParamterName=0
  VariableName : CustomerID  Direction : Input   DataType=varchar ParamterName=1
于 2012-05-30T06:46:30.670 回答
3

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

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

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

在此处输入图像描述

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

在此处输入图像描述 在此处输入图像描述

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

于 2012-05-30T08:20:45.380 回答