我有一张桌子,它有500行。我想只检索10行,我想只使用控制流插入另一个表。通过数据流任务我们可以使用OLEDB源和OLEDB目的地。但我希望通过使用执行sql任务和每个循环的方式得到结果。有可能这样做吗?我的想法是,获取十个记录的集合,并通过使用foreach循环迭代到每一行并使用execute sql task插入到表中。目标表需要动态创建。我尝试了一些方法,但没有走向。请找到图像文件。
答案 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表示第二列
在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行,其结果集应该设置为“完整结果集”,在结果集选项卡上你应该将结果集映射到这样的变量:
并像这样配置你的foreach循环容器:
在foreach的每个循环上,您将可以访问变量的值,然后您可以使用另一个execute sql任务在新的crated表上插入