在SSIS中的不同包之间继承TargetDB

在SSIS中的不同包之间继承TargetDB,ssis,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 s

我有一个多层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一次。有什么解决办法吗

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

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

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


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

由于VS版本(2010)的原因,我无法创建环境变量,因此我决定:

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

  • 对于每个dtsx文件,c#脚本都会查找并替换目标数据库

        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包。我觉得很方便。同样的逻辑也可用于设置任何重复变量

    由于VS版本(2010)的原因,我无法创建环境变量,因此我决定:

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

  • 对于每个dtsx文件,c#脚本都会查找并替换目标数据库

        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包。我觉得很方便。同样的逻辑也可用于设置任何重复变量

    您好,我使用的是Visual Studio 2010,在这个版本中有这样做的选项吗?您好,我使用的是Visual Studio 2010,在这个版本中有这样做的选项吗?