是否可以通过在 DTExec 命令行上传入不同的值来覆盖通过表达式计算的 SSIS 包中变量的值?
我有一个参数化查询,我将变量传递User::StartDate
给它。包名称是 OpenAirExport.dtsx。
如果我使用 PowerShell 中的 DTExec 调用我的包,我可以在命令行上很好地设置 StartDate 变量。例如:
& "C:\Program Files\Microsoft SQL Server\150\DTS\Binn\DTExec.exe" -File 'OpenAirExport.dtsx' `
-Set '\Package.Variables[User::StartDate].Properties[Value];2020-09-22'
这工作正常。我可以从结果数据中看到,开始日期确实设置为 2020 年 9 月 22 日。
但是,在 99% 的情况下,程序包只会获取前一天的数据。所以我在 StartDate 变量上设置了一个表达式来计算它的值:
DATEADD("day", DATEDIFF("day", (DT_DBTIMESTAMP)0, GETDATE()) - 1, (DT_DBTIMESTAMP)0)
(这个看起来相当复杂的表达式只计算从第 0 天开始的天数,然后将它们添加到第 0 天并减去 1。这是 SQL Server 中从日期时间中剥离时间的一种相当标准的方法,只留下日期。在这种情况下它将给出昨天 00:00 的日期时间)
现在,如果我在 PowerShell 中使用 DTExec 调用包而不设置 StartDate 变量值,它会给出正确的结果 - 昨天的数据。
不时有下游流程失败,我们被要求重新运行前一天的数据。所以我希望能够用从命令行传入的值覆盖 StartDate 的计算值。但我发现,如果我尝试从命令行设置值,该值将被忽略,并且该表达式仍用于计算 StartDate。
有什么方法可以强制 SSIS 用从命令行传入的值覆盖表达式值?