在SSIS

时间:2016-06-23 10:04:55

标签: ssis

我有一个多层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。那有什么解决方案吗?

2 个答案:

答案 0 :(得分:0)

是 - 创建并映射environment variable。部署时,需要映射每个包,但只需要在环境中维护一次。

您没有提到您正在运行的版本 - 这适用于SQL2012及以上版本。

答案 1 :(得分:0)

由于VS版本(2010)我无法创建环境变量,所以我决定:

  1. 添加foreach循环,查找文件夹中的每个.dtsx文件。

  2. 对于每个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;
    
  3. 谢谢这种方法,我可以立即设置我的所有.dtsx包。我觉得很方便。可以应用相同的逻辑来设置任何重复变量。