【发布时间】:2020-09-27 05:38:28
【问题描述】:
是否可以通过在 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 用从命令行传入的值覆盖表达式值?
【问题讨论】:
标签: sql-server ssis dtexec