SSIS - 动态获取连接管理器名称

问题描述 投票:0回答:1

我设置了一个平面文件连接,并且想要动态获取连接管理器名称,以便我可以在表达式生成器中使用该名称。在图像中作为示例,我将名称设置为“Address.csv”

我想动态获取连接管理器名称并将其添加到我圈出的位置。这可能吗?

我尝试查看“变量”和“参数”下拉列表,但没有提供“连接管理器名称”。谢谢

ssis
1个回答
0
投票

正确,连接管理器的名称不是您演示时可以使用的属性。

您可以动态设置连接管理器的名称,但这与您想要完成的任务相反。

我想您可以尝试使用脚本任务来获取连接管理器的值。创建一个字符串类型的变量。我将使用名为 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”

© www.soinside.com 2019 - 2024. All rights reserved.