我在 SSIS 包配置中注意到,在选择要添加到配置文件的属性时,通常会列出该属性的多个版本。例如,我可以通过这个路径添加一个包变量属性:
包->变量->变量名->属性
但我也可以通过这些路径访问相同的属性:
包->可执行文件->变量->变量名->属性
包->连接管理器->连接->变量->变量名->属性
第一个问题是这是什么原因?其次,将属性添加到配置文件的最合适的选项是什么?
我在 SSIS 包配置中注意到,在选择要添加到配置文件的属性时,通常会列出该属性的多个版本。例如,我可以通过这个路径添加一个包变量属性:
包->变量->变量名->属性
但我也可以通过这些路径访问相同的属性:
包->可执行文件->变量->变量名->属性
包->连接管理器->连接->变量->变量名->属性
第一个问题是这是什么原因?其次,将属性添加到配置文件的最合适的选项是什么?
原因是封装/作用域,一切都是可配置的。
如果您在包级别范围内创建变量,则添加到该包的所有内容都可以访问和使用它。添加一个序列容器,在里面添加一个 Foreach 循环,在里面添加一个执行 SQL 任务到一个数据流到一个文件系统任务。您可以在每个对象上创建一个变量。该事物中包含的所有内容都对这些变量具有可见性。我的 Foreach 循环定义并填充 CurrentFileName,它由执行 SQL 任务(记录我正在处理的文件)、使用正确源文件的数据流和最后的文件系统任务将其推送到存档中使用。可能没有需要该变量在该范围之外可见。我将创建一个不在包范围内的变量的特定场景是,如果我正在并行加载东西——比如维度加载。我通过维度列表处理了 3 个 Foreach 枚举器。我很懒,每个 Enumerator 内部都有相同的代码,只是使用不同的源列表。
除此之外,您通常不希望在包范围以外的任何范围内创建 SSIS 变量。否则,您可能会花费太多时间单击对象以查找变量(包资源管理器选项卡在这种情况下会很有帮助)
我对配置的经验法则是只选择 Value 或 ConnectionString(取决于它是变量还是连接管理器),并且只在根级别选择它。
最后,如果您没有BIDS Helper,它是 VS 的免费插件,可以让 SSIS/SSAS/SSRS 开发变得不那么痛苦。