SSIS Master包从另一个项目执行包

时间:2016-08-19 12:45:56

标签: sql-server ssis package

我有多个SSIS项目,但其中的一些软件包是相同的。

我想创建一个包含所有通用包的项目,并将其他项目与其特定包保持在一起。

所以我的问题是:是否可以拥有一个可以执行并将父变量传递给另一个项目的包的主包?

我是SSIS的新手很抱歉,如果这是一个明显的问题,或者我不够具体

2 个答案:

答案 0 :(得分:5)

配置Integration Services目录时,可以从其他项目执行包。

  1. 在SSIS目录中部署所有项目之后。转到SSIS目录并浏览到要执行的包。
  2. 右键单击并选择执行
  3. 它会弹出一个窗口并要求填写所需的参数
  4. 点击script菜单,然后选择New query editor window
  5. 额外步骤 - 删除选择@execution_id(不是必需的)
  6. 额外步骤 - 删除DECLARE @var0 smallint = 1行并将@var0替换为1(行中@ parameter_value = 1)
  7. 不要因为需要复制生成的脚本而关闭sql查询窗口
  8. 现在在您的主包中:

    1. 添加Execute SQL Task
    2. OLE DB connection manage r添加到SSISDB数据库
    3. Execute SQL Task Editor - > SQLstatement:在此处粘贴生成的包脚本
    4. 脚本的一个例子:

      Declare @execution_id bigint  
      EXEC [SSISDB].[catalog].[create_execution] @package_name=N'testpackage.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'TestFolder', @project_name=N'TestProject', @use32bitruntime=False, @reference_id=Null  
      Select @execution_id --delete this line  
      DECLARE @var0 smallint = 1 `-- delete this line`   
      EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id,  @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0 `--(replace this @var0 with 1)`  
      EXEC [SSISDB].[catalog].[start_execution] @execution_id  
      GO
      

      传递参数:添加以下两行以添加传递参数

      DECLARE @ReportDate nvarchar(100) = `?`  
      EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id,  @object_type=30, @parameter_name=N'ReportDate', @parameter_value=@ReportDate 
      

      现在从Execute SQL Task Editor的“参数映射”标签中添加您要作为参数传递的变量。

      请记住,变量数据类型必须与参数数据类型相同。

答案 1 :(得分:0)

如果将“日志记录”级别保留为基本(1)(默认设置),则无需每次都设置此级别。另外,如果您并行运行许多这些步骤,则SSISDB.[catalog].[set_execution_parameter_value] sp中将存在一个错误。这可能会导致execution_parameter_values上的DEADLOCK。我已经用MS提出了这个问题。

本来可以添加为评论,但是我没有足够的代表。