【问题标题】:Loop 10 records at a time and assign it to variable一次循环 10 条记录并将其分配给变量
【发布时间】:2019-02-04 17:10:49
【问题描述】:

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

我有这样的桌子,例如

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

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

select * from Dbo.JPKGD0__STP
where EMPID in ?

但这会在1循环中传递每个empid,所以我想每次传递10个empid。

如果我需要使用不同的方法/或其他任务来实现这一点,请告诉我。

【问题讨论】:

  • 尝试使用 NTILE() 分析函数,它将您的有序数据集划分为一个桶。例如:Here
  • 阅读Tour page

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


【解决方案1】:

步骤 (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

  • 初始化表达式: @[User::Counter] = 0
  • 评估表达式: @[User::Counter] < @[User::RowCount]
  • 赋值表达式: @[User::Counter] = @[User::Counter] + 10

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


参考文献

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多