gpt4 book ai didi

SSIS 包 : Store value of for loop variable in an array

转载 作者:行者123 更新时间:2023-12-01 09:58:18 25 4
gpt4 key购买 nike

我正在创建一个 SSIS 包,我必须在其中循环访问一些选定的文件夹,并且我想将文件夹名称存储在一个数组中以跟踪我处理过的文件夹。我可以在 SSIS 包中保留一个数组并继续在该数组中附加值吗?

最佳答案

您可以将 for 循环变量的值存储在数组中。在我看来,这样做有点困惑。正如@billinkc 建议的那样,使用“开箱即用”的 SSIS 功能可能是一种更简洁的方法。但是,这里有一些提示......

让我们来看看您的场景,您有一个循环遍历某些文件的 for each 循环(使用 Foreach File Enumerator )并且您希望将文件夹名称存储在一个数组中。

以下是我们将使用的一些变量:

enter image description here

FolderList将是数组和 CurrentFile将是 for 循环变量。最简单形式的包可能如下所示:

enter image description here

在脚本任务中,代码可能如下所示。我选择使用 List<string>作为我的数组类型,但您可以使用其他类型,例如 ArrayList . (注意:您需要为以下代码添加 System.Collections.GenericSystem.IO 的 using 语句):

public void Main()
{
//get current directory
string directory = Path.GetDirectoryName(Dts.Variables["User::CurrentFile"].Value.ToString());
List<string> lst = new List<string>();

// if the FolderList is already a List<string> then set set it to lst
if ((Dts.Variables["User::FolderList"].Value is List<string>))
{
lst = (List<string>)Dts.Variables["User::FolderList"].Value;
}

// if the directory isn't in the list yet, then add it to the list
if(!lst.Contains(directory))
{
lst.Add(directory);
}

// update our variable with the List<string>
Dts.Variables["User::FolderList"].Value = lst;

Dts.TaskResult = (int)ScriptResults.Success;
}

每次Script Task执行后,您会在数组中添加一个新文件夹。 for each 循环完成后,您可能想要检查数组的值。您可以使用 Script Task 执行此操作(类似于我们上面所做的):

List<string> lst = (List<string>)Dts.Variables["User::FolderList"].Value;
// do stuff with lst

您还可以使用 for each 循环遍历数组中的值(使用 Foreach From Variable Enumerator ),这是我在浏览此内容时刚刚学到的(谢谢!)。只需将要枚举的变量设置为数组变量(此处为 FolderList )并指定另一个变量(例如 CurrentFolder )作为变量映射中的索引 0。这适用于 List<string> ,但我不确定它还可以使用哪些其他集合类型。

关于SSIS 包 : Store value of for loop variable in an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20928058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com