SSIS 2008程序包配置被忽略


10

与2008年相比,与2005年(当我在命令行上指定/ ConfigFile something.dtsConfig)相比,程序包配置发生了变化,程序包中定义的变量将保留其设计时值,而不是使用config文件中的设置。

我不太确定我是否了解如何获取要使用的外部配置文件。我读过的文章说只有设置的设计时配置会覆盖外部文件的负载。这是否意味着我可以将变量更改为空白字符串,然后将其覆盖?我无法完全删除变量!整数呢?

我看过一些文章提到使用软件包中的软件包配置关闭。

我可以使用SSIS包编辑器或XML编辑器来更改包中的配置文件路径,然后它将使用该文件的设置“ last”(无论使用外部/ ConfigFile选项如何),但是我不想成为更换包装。我想要一个带有Test.dtsConfig和Production.dtsConfig的程序包,并且能够在不更改程序包的情况下来回交换。

现在推荐的方法是什么?


1
您可以在SQLServerCentral论坛上的此处缓解。行为更改的一些解释在此处 -与程序包配置有关的行为更改部分。
玛丽安

请查看以下文件,以了解我在说什么软件包和配置:Config和batchsTest packageReadme
玛丽安

Answers:


10

您必须考虑到,当由BIDS运行时,程序包将首先从配置文件中获取变量值,并且仅当配置文件不存在时,它才会发出警告,并且将从包中获取该值。

现在,命令行中的情况有所不同。您可能会遇到以下情况:

  1. 在没有选择任何配置文件的情况下,在cmd行中运行软件包:

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx"
    • 如果原始配置文件(以Prod命名)不存在于包元数据中定义的相同路径中,则使用包内部的值,并且您会收到一条警告,提示配置文件丢失;
    • 如果原始配置文件存在并且有效,则将使用配置文件中的值(内部值将被绕过);
  2. 在没有选择任何配置文件的情况下,在cmd行中运行软件包,但在调用中设置了变量:

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx" /SET \Package.Variables[checkMe];"outside the package in cmd line"
    • 如果原始配置文件不存在,则从/ SET包调用中获取该值;
    • 如果原始配置文件确实存在,则从配置文件中获取该值,甚至/ SET也将被忽略(仅在上述情况下使用);
  3. 使用新的配置文件在cmd行中运行程序包(假设使用DEV代替Prod):

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx" /configFile "c:\ETL Config\TestPackage_config_Dev.dtsConfig"
    • 如果新的配置(Dev)文件存在,而旧的(Prod)文件不存在,则使用该文件中的值;
    • 如果Dev和Prod配置文件都存在,则仅使用Prod中的值(即使在命令行调用中指定了DEV也被绕过);
  4. 在调用中使用新的配置文件和SET语句在cmd行中运行软件包:

    dtExec /file "e:\Work\TestPackageConfiguration\TestPackageConfiguration\TestPackage.dtsx" /configFile "c:\ETL Config\TestPackage_config_Dev.dtsConfig" /SET \Package.Variables[checkMe];"outside the package in cmd line - DEV config"
    • 如果两个配置文件都存在,则将使用Prod,忽略所有其他配置,甚至SET;
    • 如果不存在配置文件,则使用SET值;

因此,简而言之,如果要使用新的配置文件,则必须重命名/移动旧的配置文件,然后使用/ configFile调用该程序包。如果这还不够,甚至想覆盖新的配置文件,请使用/ SET变量。或者,您可以绕过任何配置文件,而仅在批处理调用中使用/ SET语句。

希望这将为您提供一些可能性。


因此,这听起来像是一个大问题,那就是我在开发箱上的路径在执行期间与服务器上的taht相同,因此包中config的路径始终有效。
Cade Roux

因此,我认为我应该拥有Dev,Test和Prod,使程序包始终指向Dev,而在服务器上永远没有Dev配置,然后我可以在服务器上进行多个配置,并且可以随意针对不同的配置运行软件包中的Dev config将永远找不到。因此,我可以使用Dev config进行调试,但是随后在dev框上的命令行运行它会遇到麻烦,因为它将找到该dev config。
Cade Roux

我认为您同意这确实比应该做的要复杂得多,对吗?就像他们在对2008的更改中获得了一个新的小功能(重新加载)一样,但是终止了程序包配置的最常见使用场景。
Cade Roux

好吧,是的,我同意这比应该的丑陋得多。我花了很多时间来解决这个问题,因为我一直忘记重命名原始配置文件:-)。我更希望它按以下顺序排列:SET,/ configFile,原始配置,内部包值。这对我来说更有意义
。–玛丽安

我读过的所有文章都没有真正提到它是可访问的原始配置文件,这是很多问题。现在,我明白了为什么他们发布了该SSIS软件包编辑器,以便您无需打开BIDS即可在软件包中进行更改。
Cade Roux
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.