SSIS 变量与参数 (SSIS Denali)


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

我尝试在谷歌上搜索,但未能获得一些信息。

谢谢期待!

我认为

一点背景知识将有助于理解参数概念。在这里,我将在与变量比较的上下文中解释它。若要完全掌握参数概念,可能还需要查找新的项目部署模型、环境、生成配置。

变量的使用

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

一切看起来都不错,但有几件事我总是问自己为什么,却想不通为什么:

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

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

新项目部署模型

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

如果我们希望将一些值传递到 SSIS 包中,则必须通过参数传入它们,并使用 SSMS 中的 SSIS 目录来配置参数的值(只有值,我们无法配置任何其他值(。参数和连接管理器在可以配置的 SSIS 目录中自动公开,以前通过配置文件提供的任何其他内容都无法在项目部署模型中配置(世界更干净(。在 SSIS 包中,参数的使用方式与变量在构建表达式方面相同。但是,不能在 SSIS 包中修改参数,这非常有意义。(为什么我们需要更改从外部传入的值?如果我们必须这样做,请将值传递给一个变量,然后在那里进行更改。

概括

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

对于旧的包部署模型,没有参数,世界保持不变。

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

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

  • Variables值可以在运行时更改,但parameters值不能更改。
  • Variables只能在包中使用,我们不能将其用于解决方案中的其他包,但我们可以将参数用于多个包(包存在于Solution Explorer中(。

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

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

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

然后,您的服务器名称"参数"将在生产中设置为生产服务器地址,并在测试环境中设置以包含测试服务器地址。 如果 ssis 包中的任何变量需要运行时值(例如,该变量分别用于在运行时为 prod 或测试服务器设置连接(,则该变量将使用上面的参数来查找要连接到的正确服务器。

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

根据

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

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

  1. SSIS 中的参数类似于编程中的全局常量,因此如果将它们应用于项目,则可以在任何地方使用。他们最高访问权限将是整个项目。

  2. 变量被命名,可以从查询甚至参数等分配。此外,他们的最高级别访问权限将是包。

最新更新