在不同时间执行具有不同参数的相同SSIS包

时间:2011-12-05 11:50:20

标签: sql-server-2008 parameters ssis sql-server-agent

我在2011年晚上8点运行SSIS包。

我想在2010年的晚上8:30运行相同的套餐。

我制作了一个SSIS包配置文件,并接受“Year”作为参数。每当我运行时,我需要打开一个文件,更改值并运行它。

是否可以设置计划并动态设置年份值?

或者使用2个不同的配置文件是解决它的唯一方法吗?

谢谢大家。

1 个答案:

答案 0 :(得分:19)

使用配置文件方法的挑战是您需要不断修改文件。 SSIS在启动后不会重新加载配置文件,所以你可以想象有8:05和8:35 PM的作业交换配置文件,但这会变得混乱并在某些时候中断。

我会用命令行变量(/set option in dtexec)处理这种情况。如果你从命令行运行包,它看起来像dtexec.exe /file MyPackage.dtsx即使你正在使用SQL Agent,它在后台构建那些命令行参数。

此方法假设您创建两个不同的作业(而不是每天安排2个作业的1个作业)。 AgentMyPackage2011有一个SSIS的工作步骤,导致

  • dtexec /file MyPackage.dtsx /Set \Package.Variables[User::Year].Properties[Value];\"2011\"

和AgentMyPackage2012有一个SSIS的工作步骤,导致

  • dtexec /file MyPackage.dtsx /Set \Package.Variables[User::Year].Properties[Value];\"2012\"

通过GUI,它看起来像 SQL Agent Set values tab

SQL Agent Command line tab

您要配置的属性没有GUI或选择器。但是,由于您已经为包创建了.dtsConfig文件,请打开该文件并查找类似

的部分
<Configuration ConfiguredType="Property" Path="\Package.Variables[User::Year].Properties[Value]" ValueType="Int32">
<ConfiguredValue>2009</ConfiguredValue>

该文件已经有您尝试配置的“东西”的路径,因此请将其打入您的调用程序,然后关闭软件包配置的年份部分。

最后,指向SSIS Configuration Precedence的链接,因为2005年与2008年的模型存在差异。我看到你在票证中指出了2008,但对于未来的读者,如果你同时使用/ SET和配置源(xml,sql server,registry,environment variable),那么操作顺序会因版本而异。