【问题标题】:how do I execute an SSIS package from Integration Services Catalog while setting a variable in T/SQL?如何在 T/SQL 中设置变量时从集成服务目录执行 SSIS 包?
【发布时间】:2016-08-08 17:23:22
【问题描述】:

我最近继承了一个数据库,其中包含一个存储过程,该存储过程使用 xp_cmdshell 运行 SSIS 包,同时将单个用户变量添加到包中(代码如下)。作为我们迁移到 SQL Server 2016(从 SQL Server 2008R2)的一部分,我试图更改此存储过程,改为从名为 SSISDB 的集成服务目录中调用包。 我遇到的问题是我似乎无法弄清楚如何以它识别的方式将该变量传递给包!

旧代码:

DECLARE @Report_id INT = 63936
   ,@result INT
   ,@dtsExecCmd VARCHAR(4000)
   ,@params INT
   ,@path VARCHAR(500);
DECLARE @sif_report_object_ref_id VARCHAR(32)
   ,@error_count INT;

SET @result = 0;

SET @path = 'E:\OldServerFiles\Deployment\Package.dtsx';
SET @params = @Report_id; 

SET @dtsExecCmd = 'dtexec /F ' + @path; 
SET @dtsExecCmd = @dtsExecCmd
    + ' /SET "\package.Variables[User::Report_Id].Properties[Value]";"\"'
    + CAST(@params AS VARCHAR(10)) + '\""';

EXEC @result = [sys].[xp_cmdshell] @dtsExecCmd, [no_output];
PRINT @result;

这是我目前所拥有的,它执行但使用 Report_id 参数的默认值:

DECLARE @execution_id BIGINT
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Package.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'TestProject', @project_name=N'TestReportETLPackage', @use32bitruntime=False, @reference_id=NULL
SELECT @execution_id
DECLARE @var0 SMALLINT = 3
DECLARE @ReportId INT = 63936
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id,  @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0
-- something goes in here for User::Report_Id as a package variable...
EXEC [SSISDB].[catalog].[start_execution] @execution_id
GO

【问题讨论】:

  • 您能否修改包以从使用 SSIS 变量更改为使用 SSIS 参数?这是从调用进程传入值的最简单/最清晰的方法。
  • 目前我无法修改包,但当我让 SSDT 与我们的软件策略集成时,我会这样做。

标签: sql-server ssis sql-server-2016


【解决方案1】:

你应该用一个参数替换这个变量,这样它就可以从外部直接设置,并且让包开发人员清楚它应该以这种方式提供。

作为一个临时修复,您应该会发现类似以下的方法有效。

EXEC [catalog].[set_execution_property_override_value]
  @execution_id = @execution_id,
  @property_path = '\package.Variables[User::Report_Id].Properties[Value]',
  @property_value = @Report_id,
  @sensitive = 0; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多