我们有一大堆SSIS包来处理指定根“Data”文件夹位置的文件并将其加载到指定的目标数据库。
当然,根输入文件夹在开发和生产环境中也会像目标数据库一样发生变化。
对于特定的输入文件,我们可能有一个子文件夹不在根数据文件夹中,但是开发中的文件目录结构与生产相匹配;只有根文件夹位置不同。
我可以轻松地使用单个DtsConfig文件来控制数据库连接,方法是根据Development或生产环境中的文件更改此文件的内容。
关键部分: 但是,文件的ConnectionStrings并不是那么简单。理想情况下,我希望能够以%RootFolder%\ SourceSystemA \ HardCodeFileName.txt的形式指定文件Connectionstring路径,其中%Rootfolder%根据环境而变化。
但是,如果没有编写脚本来在运行时修改包(我没有看到任何示例)或以编程方式创建整个包,我不认为这可以做到。以这种方式使用环境变量仅应用于包属性的一部分似乎不受支持。 (试试吧!)似乎也不支持相对路径(尽管我们的文件位于不同的驱动器上,因此这可能没有帮助。)
不确定我所理解的“DRY”主体是否与此相关,但基本上,我想将那些静态的东西与那些变化的东西分开,并允许在一个地方轻松更新并让它适用于所有地方。
如何实现这一目标?
答案 0 :(得分:1)
这不完美,但我确实有这样做的方法。首先,向包中添加一个变量以保存根文件夹名称。接下来,单击您的连接并转到属性(F4)。单击“...”按钮修改“表达式”。为连接字符串创建表达式。对于表达式,您可以将根文件夹与特定文件名组合在一起(例如,@[User::RootFolder] + "\SpecificPath\Filename.csv"
)。
完成此设置后,您可以使用配置文件更改RootFolder包变量,然后使用它来正确读取/写入所有文件。
在回答标题问题时 - SSIS在某些地方支持DRY,而在其他地方则不支持DRY。对于您要做的事情,答案是肯定的(通过上面列出的表达式)。