一次循环 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 来获取特定的行
点击参数并选择变量INITIAL
和FINAL
【讨论】:
【参考方案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 中再次休息时出错