将项目部署到目录后,SSIS 用户变量未更新

SSIS user variable not updating after project is deployed to the catalog

我有一个控制流,它使用执行 SQL 任务设置用户变量。在 Visual Studio 中一切正常,但是一旦我将它部署到 SSIS 目录,变量似乎就没有被分配。我正在针对完全相同的数据源执行它。

我会解释到底是怎么回事...

序列容器中的第一个任务从状态 table 读取为 table 记录的最后一个 LSN。如果 table 没有条目,则它遵循上图中的路径 1

在第 2 步,它使用源数据库上的 CDC 函数读取 table 的最小 LSN。然后它将 LSN 和该 LSN 的日期时间存储在两个用户变量中。这是数据复制的"window start"。

步骤 3 从目标读取最大更改日期 table。

步骤 4 如果 window 开始时间早于最新更改日期,则分支,因为这会导致将重复数据导入目标 table。 (足以说明在加载到目标之前我无法删除重复数据的原因 table...)


当我 运行 Visual Studio 中的项目时,一切正常。它通过步骤 1-3,然后继续进行 DFT,因为 table 的最小 LSN 在目标 table 中的最大更改日期之后。我使用断点来确保变量实际上设置正确。

一旦我将项目部署到 SSIS 目录,它就会执行第 4 步并记录错误行。它似乎没有设置变量或约束表达式没有使用正确的值。我已经尝试使用结果集设置变量并作为 Execute SQL 任务中的输出参数。我可以从日志消息中看到来自源 table 的最大更改日期是正确的。

一件奇怪的事是日志消息中的变量值与设计时值不同。设计时间值为“1899-12-25 14:20:00”,但日志消息显示“1899-12-30 00:00:00”。但这可能是我使用了错误的转换方法或其他原因。 .. 我没有仔细研究它,因为它仍然不应该遵循路径 4。

它 运行 在 Visual Studio 中符合预期,但在他的服务器上有不同的行为,这让我很困惑。我想不出是什么原因造成的。

这些包是使用 BIML 创建的,但我认为这实际上没有任何联系。完整的解决方案复制超过 100 tables,每个 table 一个包。即使我尝试仅对单个包进行调试部署,问题仍然存在。

验证帐户运行 SSIS 有权查询源表。对于权限不足,SSIS 并不总是以您预期的方式出错。

我最喜欢的是 Foreach File 循环,它总是返回一个空文件列表,并带有 "couldn't find the path"

的小警告

我猜这里从 CDC 函数读取 LSN 有细微差别