我认为一点背景知识将有助于理解参数概念。在这里,我将在与变量进行比较的情况下对其进行解释。要完全掌握 Parameter 概念,您可能还需要查找新的 Project Deployment Model、Environment、Build Configuration ......
变量的使用
对于 2012 年之前的 SSIS,如果我们需要在执行之前将任何外部值传递给包(就像我们一直都在做的那样),我通常使用配置文件(或其他几种方式)。假设我们有一个文件服务器,它将用于访问共享文件,我将使用变量来存储服务器名称,并将此变量公开给配置文件。如果实际的文件服务器发生变化(开发环境到测试环境等),我们只需要在配置文件中更改该变量的值,SSIS 包保持不变。
一切看起来都不错,但有几件事我总是问自己为什么并且无法弄清楚为什么:
当我向配置文件公开变量时,100% 的时间,我只是公开“值”属性。为什么 SSIS 允许公开所有其他变量属性?
为什么 SSIS 没有“私有”变量? “私有”是指当我选择要配置的变量时,“私有”变量并没有显示在选择列表中。 SSIS 包可能有几十个变量,对于内部价值持有者,公开它们有什么意义?为什么我必须一直滚动才能找到我需要公开的唯一一个?
新项目部署模型
SSIS 2012 引入了一种新的部署模型,即项目部署模型。简而言之,此模型将 SSIS 项目作为单个单元部署到 SQL Server SSIS 目录中,此模型中不提供包配置(它在旧模型中可用,称为包部署模型,带有 SSIS 2012你可以选择使用哪一个,2012默认为新型号)。
如果我们想要将一些值传递到 SSIS 包中,我们必须通过 Parameters 将它们传递,并使用 SSMS 中的 SSIS 目录来配置参数的值(只有值,我们无法配置其他任何东西)。参数和连接管理器在可以配置的 SSIS 目录中自动公开,以前通过配置文件可用的其他任何东西都不能在项目部署模型中配置(世界要干净得多)。在 SSIS 包中,就构建表达式而言,参数的使用方式与变量的使用方式相同。 但是,不能在 SSIS 包中修改参数,这很有意义。 (为什么我们需要更改从外部传入的值?如果必须,将值传递给变量,然后在那里进行更改..)
总结
参数仅在项目部署模型中可用,并且它提供了在此模型中将值从外部传递到 SSIS 包的唯一机制。如果我们将 SSIS 包视为一个 OO 类,则可以将参数视为公共属性,外部可以访问并为其赋值(类本身可以/将使用它,但不能修改它)。变量可以被认为是私有变量,在内部使用,外部世界不需要知道它的任何信息。
对于旧的Package Deployment模型,没有Parameter,世界保持不变。