我设置了一个平面文件连接,并且想要动态获取连接管理器名称,以便我可以在表达式生成器中使用该名称。在图像中作为示例,我将名称设置为“Address.csv”
我想动态获取连接管理器名称并将其添加到我圈出的位置。这可能吗?
我尝试查看“变量”和“参数”下拉列表,但没有提供“连接管理器名称”。谢谢
正确,连接管理器的名称不是您演示时可以使用的属性。
您可以动态设置连接管理器的名称,但这与您想要完成的任务相反。
我想您可以尝试使用脚本任务来获取连接管理器的值。创建一个字符串类型的变量。我将使用名为 FFCM_via_Task(通过任务的平面文件连接管理器)的变量,并将其添加到 scrip 任务的读/写集合中。
以下 C# 代码片段将枚举包中的所有连接并将值分配给我们的变量(以及将其弹出到默认记录的信息事件中)
public void Main()
{
bool fireAgain = false;
// TODO: What should happen if there are multiple connections?
// How do you know what "address.csv" is called without knowing the "name"
foreach (var item in Dts.Connections)
{
Dts.Events.FireInformation(0, "SCR Demo", item.Name, "", 0, ref fireAgain);
Dts.Variables["User::FFCM_via_Task"].Value = item.Name;
}
Dts.TaskResult = (int)ScriptResults.Success;
}
脚本任务执行后,我们可以看到名称列在address.csv
我无法解决的是代码中的 TODO。脚本任务如何“知道”它应该使用哪个正确的连接管理器作为“名称”。
最后,作为 SSIS 实践者不到 20 年,我从来没有理由像您尝试那样使用连接管理器名称。可能你无意中遇到了一个我从未想到过的极端情况,或者你可能会以……迂回的方式解决它(动态主义)。
与其动态派生文件名,不如对其进行硬编码。
因此,你的问题可以简化为这样的表达式
@[用户::动态路径] +“地址.csv”