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

Posted

技术标签:

【中文标题】一次循环 5 条记录并将其分配给变量【英文标题】:Loop 5 records at a time and assign it to variable 【发布时间】:2012-12-24 03:03:13 【问题描述】:

我有一个包含 811 条记录的表。我想一次获取五条记录并将其分配给变量。下次我在 SSIS 中运行foreach 循环任务时,它将循环另外五个记录并覆盖变量。我试过用光标做,但找不到解决方案。任何帮助将不胜感激。我有这样的表格,例如

ServerId ServerName
1         Abc11
2         Cde22
3         Fgh33
4         Ijk44
5         Lmn55
6         Opq66
7         Rst77
.           .
.           .
.           .

我希望查询应该采用如下前五个名称并将其分配给变量

ServerId ServerName
1         Abc11
2         Cde22
3         Fgh33
4         Ijk44
5         Lmn55

然后下一个循环取另外五个名称并覆盖变量值,依此类推,直到最后一条记录被消耗。

【问题讨论】:

【参考方案1】:

考虑到 ltn 的回答,这是您可以实现限制 SSIS 中的行的方法。

设计看起来像

第 1 步:创建变量

  Name       DataType 
  Count        int
  Initial      int
  Final        int

第 2 步:为第一个执行 SQL 任务编写 sql 以存储计数

  Select count(*) from YourTable

在此任务的General 选项卡中,选择结果集为Single Row

在 ResultSet 选项卡中将结果映射到变量

  ResultName       VariableName
    0               User::Count

步骤 3:在 For 循环容器中输入如下所示的表达式

第 4 步:在 For 循环中拖动一个执行 SQL 任务并编写表达式

在参数映射中映射initial变量

  VariableName    Direction   DataType   ParameterName   ParameterSize
   User::Initial   Input       NUMERIC     0                -1

结果集选项卡

  Result Name     Variable Name
   0                 User::Final

在 DFT 中,你可以编写 sql 来获取特定的行

点击参数并选择变量INITIALFINAL

【讨论】:

【参考方案2】:

如果您的数据不会在分页周期之间更新并且排序顺序始终相同,那么您可以尝试类似的方法:

CREATE PROCEDURE TEST
(
    @StartNumber INT,
    @TakeNumber INT
)
AS
SELECT TOP(@TakeNumber) 
    *
FROM(
    SELECT
        RowNumber=ROW_NUMBER() OVER(ORDER BY IDField DESC),
        NameField
    FROM 
        TableName
)AS X   
WHERE RowNumber>=@StartNumber

【讨论】:

以上是关于一次循环 5 条记录并将其分配给变量的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2007 - 选择多条记录并将值分配给字段

在 FOR 循环中第一次选择 20 条记录并在 oracle 中再次休息时出错

如何使用 LINQ 仅从实体加载最后一条记录?

构造器

在 for 循环中创建几个 tkinter 小部件并将它们分配给变量

在 for 循环中创建 CGRect 并将其分配给 UIView