SSIS变量与参数(SSIS Denali)

时间:2013-03-11 11:28:44

标签: ssis

  1. SSIS Denali中的变量和参数有什么区别?
  2. 如果有什么不同那么参数可以做什么?Variables不能做什么?反之亦然。
  3. 何时应该使用SSIS参数和变量?
  4. 我尝试在Google上搜索,但我没有得到一些信息。

    感谢预期!

6 个答案:

答案 0 :(得分:33)

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

使用变量

在2012年之前的SSIS中,如果我们需要在执行之前将任何外部值传递给包(因为我们都在做所有时间),我通常使用配置文件(或其他几种方式)。假设我们有一个文件服务器,它将用于访问共享文件,我将使用变量来存储服务器名称,并将此变量公开给配置文件。如果更改了实际的文件服务器(dev env to test env等),我们只需要在配置文件中更改该变量的值,并且SSIS包保持不变。

一切看起来都不错,但有几件事我总是问自己为什么,也无法找出原因:

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

  2. 为什么SSIS没有“私有”变量?通过“私人”我的意思是当我选择要配置的变量时,“私人”只是没有显示在选择列表中。 SSIS包可能有几十个变量,对于内部价值持有者来说,暴露它们的重点是什么?为什么我必须一直滚动才能找到我需要展示的唯一一个?

  3. 新项目部署模型

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

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

    总结

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

它是这样的: 说您有一个名为ServerName的项目参数:

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

  

然后将在带有产品服务器地址的产品中以及在测试环境中设置ServerName'参数',以包含测试服务器地址。   如果ssis软件包中的任何变量需要运行时值(例如,该变量分别用于在生产时为prod或测试服务器设置连接),则该变量将使用上方的参数来查找要连接的正确服务器。 / p>

因此在特定于环境的方案中通常需要参数。

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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