26
  1. SSIS Denali 中的变量和参数有什么区别?
  2. 如果有任何区别,那么哪些变量不能做而参数可以做什么?或相反亦然。
  3. 什么时候应该使用 SSIS 参数和变量?

我尝试在谷歌上搜索,但我没有得到一些信息。

感谢期待!

4

6 回答 6

46

我认为一点背景知识将有助于理解参数概念。在这里,我将在与变量进行比较的情况下对其进行解释。要完全掌握参数概念,您可能还需要查找新的项目部署模型、环境、构建配置。

变量的使用

对于 2012 年之前的 SSIS,如果我们需要在执行之前将任何外部值传递给包(就像我们一直都在做的那样),我通常使用配置文件(或其他几种方式)。假设我们有一个文件服务器,它将用于访问共享文件,我将使用变量来存储服务器名称,并将此变量公开给配置文件。如果实际的文件服务器发生了变化(开发环境到测试环境等),我们只需要更改配置文件中该变量的值,SSIS 包保持不变。

一切看起来都很好,但有几件事我总是问自己为什么并且无法弄清楚为什么:

  1. 100% 的时候,当我向配置文件公开变量时,我只是公开了“值”属性。为什么 SSIS 允许公开所有其他变量属性?

  2. 为什么 SSIS 没有“私有”变量?“私有”是指当我选择要配置的变量时,“私有”变量并没有显示在选择列表中。SSIS 包可能有几十个变量,对于内部价值持有者,公开它们有什么意义?为什么我必须一直滚动才能找到我需要公开的唯一一个?

新项目部署模型

SSIS 2012 引入了一个新的部署模型,项目部署模型。简而言之,此模型将 SSIS 项目作为一个单元部署到 SQL Server SSIS 目录中,并且此模型中不提供包配置(它在称为包部署模型的旧模型中可用,使用 SSIS 2012 您可以选择哪个使用,2012默认为新型号)。

如果我们想将一些值传递到 SSIS 包中,我们必须通过参数传递它们,并使用 SSMS 中的 SSIS 目录来配置参数的值(只有值,我们不能配置其他任何东西)。参数和连接管理器在可以配置的 SSIS 目录中自动公开,以前通过配置文件可用的其他任何东西都不能在项目部署模型中配置(世界要干净得多)。在 SSIS 包中,就构建表达式而言,参数的使用方式与变量的使用方式相同。但是,不能在 SSIS 包中修改参数,这很有意义。(为什么我们需要更改从外部传入的值?如果必须,将值传递给变量,然后在那里进行更改..)

总结

参数仅在项目部署模型中可用,并且它提供了在此模型中将值从外部传递到 SSIS 包的唯一机制。如果我们将 SSIS 包视为一个 OO 类,则可以将参数视为公共属性,外部可以访问它并为其赋值(类本身可以/将使用它,但不能修改它)。变量可以被认为是私有变量,在内部使用,外部世界不需要知道任何关于它的信息。

对于旧的 Package Deployment 模型,没有 Parameter,世界保持不变。

于 2013-03-29T10:05:12.820 回答
10

仅供参考,简而言之,变量的值可以在运行时更改,但参数不能。参数可以帮助您进行项目部署,您可以在 SSISDB 目录中设置它,而变量不能。

于 2016-07-19T20:49:37.093 回答
3

它的工作原理如下:假设您有一个名为 ServerName 的项目参数:

假设您将 SSIS 包部署到两个集成目录环境中,一个是为生产服务器配置的,另一个是为测试服务器配置的:

然后您的 ServerName“参数”将在 prod 中设置为 prod 服务器地址,并在测试环境中设置为包含测试服务器地址。如果 ssis 包中的任何变量需要运行时值(例如,该变量用于在运行时分别为 prod 或 test 服务器设置连接),那么该变量将使用上面的参数来查找要连接的正确服务器。

因此,在特定环境的场景中通常需要参数。

根据您在 Visual Studio 中配置解决方案的方式,有两种类型的参数:项目参数或包参数。项目中的所有包都可以访问项目参数。

于 2018-08-17T20:36:49.937 回答
3

变量和参数与java中的类似,我们以参数的形式将一些值传递/传递给某些方法/任务,并且我们在该特定任务中使用它们,我们无法更改这些值,因为它们同样是该方法的外部事物在 SSIS 中,项目参数用于在包中动态设置某些变量或连接。其中变量仅限于包级别的内部。

于 2018-02-21T11:04:56.423 回答
3

变量和参数之间有很多区别,下面很少提到:

  • Variablesvalues 可以在运行时更改,但parametersvalue 不能更改。
  • Variables只能在包中使用,我们不能将它用于解决方案中的其他包,但我们可以将参数用于多个包(包存在于 中Solution Explorer)。
于 2019-11-25T05:43:37.983 回答
0

参数使用从包外部发送数据,如用户名、密码或连接字符串等。变量在包内部使用。这意味着您可以在其中一个 SSIS 包中定义一个变量并在包级别使用它。

于 2019-01-23T09:37:59.677 回答