动态连接到部署包的服务器

Dynamically connect to the server a package is deployed on

我有一个包需要在不同的环境下运行(不同的server\instance,相同的数据库名称)例如:

服务器:live-db01\live 数据库:Campaign

服务器:dev-db01\livedebug 数据库:Campaign

包本身对于每个环境都是相同的。唯一改变的是服务器的连接字符串。这些包被发送到适当的部门,他们将其部署到他们的服务器上。

我的问题是假设包安装在 live-db01 Integration Services 实例上。有没有办法访问包内的服务器信息并相应地设置连接字符串?

现在我们使用 4 种不同的配置部署同一个包,XML.config 的唯一区别是连接字符串。有没有一种方法可以在没有配置的情况下部署单个包,该配置会根据部署的服务器动态更改其连接字符串?

如果您使用变量设置连接字符串的值,您可以使用脚本任务将变量设置为您想要的任何值。

因为脚本任务可以访问 .net 基础 类 您可以检查 System.Environment.MachineName 以获取主机并相应地设置配置。

如果您有一个名为 "CONNECTION_STRING" 的字符串变量并添加了一个执行类似以下操作的脚本任务:

 string hostName = System.Environment.MachineName;
        string connectionString = "";
        switch (hostName)
        {
            case "host1":
                connectionString = "SERVER=abc;Initial Catalog=blah;...";
                break;

            case "host2":
                connectionString = "SERVER=abc;Initial Catalog=blah;...";
                break;

            case "host3":
                connectionString = "SERVER=abc;Initial Catalog=blah;...";
                break;


        }
        Dts.Variables["CONNECTION_STRING"].Value = connectionString;

那应该做你想做的。要使用表达式,请转到连接上的表达式 属性 并使用变量“@[User::CONNECTION_STRING]”覆盖 "ConnectionString" 属性,您可能想要为连接启用延迟验证。