Loop 10 records at a time and assign it to variable(一次循环10条记录并将其赋值给变量)
问题描述
我有一个包含900条记录的表。 我想一次获得10条记录,并将其分配给变量。 下次我在SSIS中运行For Each循环任务时, 它将循环另外10条记录并覆盖变量。 我们将非常感谢您的帮助。
我有这样的桌子,例如
EMPID
0001
00045
00067
00556
00078
00345
00002
00004
00005
00006
00007
00008
这是要我试过执行SQL任务把900条记录拉到变量,把执行SQL任务连接到For Each循环,里面For Each循环有数据流任务,源有SQL查询,目标是表。
select * from Dbo.JPKGD0__STP
where EMPID in ?
但这将在1
循环中传递每个Empid,所以我希望每次传递10个Empids。
如果我需要使用不同的方法/或其他任务来实现这一点,请告诉我。
推荐答案
步骤(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循环容器
现在,添加一个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]
作为源。
参考资料
- Row Offset in SQL Server
- SQL Server OFFSET FETCH
- SSIS Basics: Using the Execute SQL Task to Generate Result Sets
- ORDER BY Clause (Transact-SQL)
这篇关于一次循环10条记录并将其赋值给变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!