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

时间:2012-12-24 03:03:14

标签: sql-server ssis

我有一张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

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

2 个答案:

答案 0 :(得分:5)

考虑到ltn的答案,这就是如何限制SSIS中的行。

设计看起来像

enter image description here

第1步:创建变量

  Name       DataType 
  Count        int
  Initial      int
  Final        int

步骤2:对于第一个执行SQL任务,编写sql以存储计数

  Select count(*) from YourTable

在此任务的General选项卡中,选择ResultSet为Single Row

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

  ResultName       VariableName
    0               User::Count

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

enter image description here

步骤4:在For循环内拖动一个执行SQL任务并编写表达式 enter image description here

在参数映射中映射initial变量

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

结果设置标签

  Result Name     Variable Name
   0                 User::Final

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

enter image description here

点击参数,然后选择变量INITIALFINAL

答案 1 :(得分:1)

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

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