我有一张桌子,它有 500 行。我只想检索 10 行,并且只想使用控制流插入到另一个表中。通过数据流任务,我们可以使用 OLEDB 源和 OLEDB 目标。但我希望通过使用执行 sql 任务和每个循环来获得结果。有可能这样做吗?我的想法是,获取十条记录的集合,并使用 foreach 循环迭代每一行并使用执行 sql 任务插入表中。目标表需要动态创建。我尝试了一些方法,但没有前进。请找到图像文件。
2 回答
取自 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
我希望你在“学习模式”下这样做。没有理由对数据流上的控制流执行此操作。
无论如何,您的打印屏幕是正确的,我会在开始时添加另一个执行 sql 任务来创建您的目标表。
然后,您的执行 sql 任务应该有查询来带来您想要的 10 行,其结果集应该设置为“完整结果集”,并且在结果集选项卡上,您应该将结果集映射到如下变量:
并像这样配置你的 foreach 循环容器:
在 foreach 的每个循环上,您都可以访问变量上的值,然后您可以使用另一个执行 sql 任务然后在新的 crated 表上插入