一次循环10条记录并将其分配给变量

时间:2019-02-04 17:10:49

标签: sql sql-server ssis etl ssis-2012

我有900条记录的表格。 我想一次获取10条记录并将其分配给变量。 下次当我在SSIS中运行for each循环任务时, 它将循环另外10条记录并覆盖变量。 任何帮助将不胜感激。

我有这样的表,例如

EMPID
0001
00045
00067
00556
00078
00345
00002
00004
00005
00006
00007
00008

这是我要尝试执行sql任务以将900条记录拉到变量,将Execute sql任务连接到。对于每个循环,每个循环内部都有数据流任务,源有sql查询,目标是表。

select * from Dbo.JPKGD0__STP
where EMPID in ?

但这将在1循环中传递每个empid,因此我想每次传递10个empid。

请告知我是否需要使用其他方法/或其他任务来实现这一目标。

1 个答案:

答案 0 :(得分:0)

步骤(1)-创建变量

您必须创建两个int类型的变量:

  • @[User::RowCount] >>键入int
  • @[User::Counter] >>键入int
  • @[User::strQuery] >>输入字符串

将以下表达式分配给@[User::strQuery]

"SELECT  EMPID
FROM     Dbo.JPKGD0__STP
ORDER BY EMPIDASC 
OFFSET  " + (DT_WSTR,50)@[User::Counter]  + " ROWS 
FETCH NEXT 10 ROWS ONLY "

步骤(2)-获取行数

首先使用以下命令添加Execute SQL Task

SELECT Count(*) FROM Dbo.JPKGD0__STP;

并将结果存储在@[User::RowCount]变量check this link中以获取更多信息)。

步骤(3)-对于循环容器

现在,添加带有以下表达式的For Loop Container

  • InitExpression: @[User::Counter] = 0
  • EvalExpression: @[User::Counter] < @[User::RowCount]
  • AssignExpression: @[User::Counter] = @[User::Counter] + 10

For loop container内,添加一个Data flow task,其中包含OLE DB源和目标。在OLE DB源中,选择Access Mode作为SQL Command from variable,然后选择@[User::strQuery]作为源。


参考