【问题标题】:How to access Sequence Container from code of child Script Task in SSIS packages如何从 SSIS 包中的子脚本任务代码访问序列容器
【发布时间】:2017-03-28 15:23:26
【问题描述】:

我有一个带有 4 个序列容器的 SSIS 包。他们每个人都有一个脚本任务。我想从脚本任务代码中捕获容器的名称。我怎样才能做到这一点?我还没有找到访问父对象的方法。

正如@LONG 所评论的,我目前已经用变量实现了这一点。我的问题是,因为每个容器完全相同(即它包含相同的任务和代码),所以当我进行更改时,我只在其中一个中进行,然后删除其他 3 个,然后复制/粘贴一个更新。因此,通过变量实现,我需要在复制/粘贴部分之后进行更多更改,这可以通过读取容器名称来避免

【问题讨论】:

  • 它相当 hacky,但建立在 System::ParentContainerGUID 上,您可以让脚本任务通过 SSIS 对象模型打开包,然后查看该 GUID 的任务并从那里提取 name 属性.最大的挑战是脚本任务无法访问整个包,因此您需要传入 .dtsx 的位置,然后如果它在 msdb 或 SSISDB 而不是文件中,这种方法会变得很难看系统

标签: sql-server ssis script-task


【解决方案1】:

您可以使用Variable 来实现这一点。

在您的情况下,定义另外四个variables 用于存储container 名称,并将它们命名在value 字段中。

然后进入每个容器的properties页面,展开Expression,设置Name等于对应的变量,之后你可以发现容器名称已经变成了那个值名称。

最后,您可以在脚本中将该变量用作只读或读写,这与容器名称相同。

更新:

如果您认为这太复杂和耗时(事实并非如此),您可以使用一个名为 System::ParentContainerGUID 的系统变量来唯一标识每个容器,即使您从同一个容器复制和粘贴,如果会生成一个唯一的 ID 字符串。但这是一个随机字符的字符串,与实际名称不同。

【讨论】:

  • 这正是我现在实现它的方式。我的问题是,因为每个容器完全相同(即它包含相同的任务和代码),所以当我进行更改时,我只在其中一个中进行,然后删除其他 3 个,然后复制/粘贴一个更新。因此,通过变量实现,我需要在复制/粘贴部分之后进行更多更改,这可以通过读取容器名称来避免。我要更新我的问题,因为我也应该解释这部分
  • 在脚本内部,您可以使用 Dts.Variables["System::ParentContainerGUID"] 访问 ParentContainerGUID 的值
猜你喜欢
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多