sql - 一次循环10条记录,赋值给变量

标签 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 条记录拉到变量,将执行 sql 任务连接到每个循环,每个循环内部都有数据流任务,源有 sql 查询,目标是表。

select * from Dbo.JPKGD0__STP
where EMPID in ?

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

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

最佳答案

步骤 (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
  • EvalExpression: @[User::Counter] < @[User::RowCount]
  • 赋值表达式: @[User::Counter] = @[User::Counter] + 10

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


引用资料

关于sql - 一次循环10条记录,赋值给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54521074/

相关文章:

mysql - SSIS MySQL ADO.net SQL 任务输入和输出

mysql - LPAD/RPAD : Align column

sql - 在 t-sql 中删除所有大表的最佳方法是什么?

sql - 仅当小数点前的数字为 0 时才对小数点四舍五入

SSIS 2019 AutoAdjustBufferSize 导致缓冲区分配错误

c# - 在SSIS 2012中访问脚本组件中的对象变量

mysql - 表中开始日期和结束日期之间的周末事件

c# - EF Linq 中的 HAVING 子句

sql-server - 与现有行相关的 TSQL 检查约束

保存在字段中的 SQL 函数 - 如何执行 DATEADD()?