4

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

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

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

4

2 回答 2

6

考虑到 ltn 的回答,这就是您如何实现限制 SSIS 中的行。

设计看起来像

在此处输入图像描述

第 1 步:创建变量

  Name       DataType 
  Count        int
  Initial      int
  Final        int

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

  Select count(*) from YourTable

General此任务的选项卡中选择 ResultSet as Single Row

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

  ResultName       VariableName
    0               User::Count

第 3 步:在 For Loop 容器中输入如下所示的表达式

在此处输入图像描述

第 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

于 2012-12-24T09:54:46.077 回答
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
于 2012-12-24T03:21:49.667 回答