我有一个多层SSIS项目。基本结构如下:
|-- Package level 0 (MASTER package that contains references to other packages)
|-- Package level 1 (contains references to another package)
|-- Package level 1.1 (execute sql task nodes and dataviewers package 1.1 specific)
|-- Package level 1 (contains references to another package)
|-- Package level 1.2 (execute sql task nodes and dataviewers package 1.2 specific)
...
现在让我的项目工作我需要在每个包中定义连接管理器OLE DB(TargetDB)。我不喜欢这种方法,因为随着包数的增加 - 所需的调整数量也会增加。
我想在MASTER(0级)上只定义一次TargetDB。那有什么解决方案吗?
答案 0 :(得分:0)
是 - 创建并映射environment variable。部署时,需要映射每个包,但只需要在环境中维护一次。
您没有提到您正在运行的版本 - 这适用于SQL2012及以上版本。
答案 1 :(得分:0)
由于VS版本(2010)我无法创建环境变量,所以我决定:
添加foreach循环,查找文件夹中的每个.dtsx文件。
对于每个dtsx文件,c#脚本都会找到并替换目标db。
string fileText;
try
{
fileText = System.IO.File.ReadAllText(Dts.Variables["User::TargetDB_CurrentFile"].Value.ToString());
fileText = fileText.Replace("PUT DB NAME HERE", Dts.Variables["User::TargetDB_Name"].Value.ToString());
System.IO.File.WriteAllText(Dts.Variables["User::TargetDB_CurrentFile"].Value.ToString(), fileText);
Dts.TaskResult = (int)ScriptResults.Success;
}
catch (Exception ex)
{
Dts.TaskResult = (int)ScriptResults.Failure;
throw ex;
}
finally
{
fileText = null;
}
Dts.TaskResult = (int)ScriptResults.Success;
谢谢这种方法,我可以立即设置我的所有.dtsx包。我觉得很方便。可以应用相同的逻辑来设置任何重复变量。