我有一个需要在不同环境(不同的服务器\实例,相同的数据库名称)中运行的包,例如:
服务器:live-db01\live
db:Campaign
服务器:dev-db01\livedebug
db:Campaign
每个环境的包本身都是相同的。唯一改变的是服务器的连接字符串。这些包被发送到适当的部门,并将它们部署到他们的服务器上。
我的问题是,假设软件包已安装到live-db01
Integration Services实例上。有没有办法在包内访问此服务器信息并相应地设置连接字符串?
现在我们使用4种不同的配置部署相同的包,唯一的区别在于.config是连接字符串。有没有办法在没有配置的情况下部署单个软件包,根据部署的服务器动态更改其连接字符串?
答案 0 :(得分:0)
如果使用变量设置连接字符串的值,则可以使用脚本任务将变量设置为您想要的任何值。
由于脚本任务可以访问.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;
那应该做你想要的。要使用表达式,请转到连接上的Expressions属性并覆盖" ConnectionString"变量" @ [User :: CONNECTION_STRING]"并且您可能希望为连接启用延迟验证。