【问题标题】:Execute SSIS package using storted procedure in ADF v2在 ADF v2 中使用存储过程执行 SSIS 包
【发布时间】:2018-07-25 06:33:20
【问题描述】:

我想在 ADFv2 中执行一个 SSIS 包。

我创建了一个管道并为它使用了一个存储过程,如此处所述

https://docs.microsoft.com/en-us/azure/data-factory/how-to-invoke-ssis-package-stored-procedure-activity.

DECLARE @return_value INT, @exe_id BIGINT, @err_msg NVARCHAR(150)    
EXEC @return_value=[SSISDB].[catalog].[create_execution] 
@folder_name=N'xxx', 
@project_name=N'xxx', 
@package_name=N'xxx.dtsx', 
@use32bitruntime=0, @runinscaleout=1, @useanyworker=1, @execution_id=@exe_id OUTPUT    

EXEC [SSISDB].[catalog].[set_execution_parameter_value] @exe_id, @object_type=50, @parameter_name=N'SYNCHRONIZED', @parameter_value=1    
EXEC [SSISDB].[catalog].[start_execution] @execution_id=@exe_id, @retry_count=0    

IF(SELECT [status] FROM [SSISDB].[catalog].[executions] WHERE execution_id=@exe_id)<>7 
BEGIN 
SET @err_msg=N'Your package execution did not succeed for execution ID: ' 
+ CAST(@exe_id AS NVARCHAR(20)) RAISERROR(@err_msg,15,1) 
END

但这仅在数据库凭据保存在包中时才有效。有没有办法使用我在集成服务目录的环境属性中配置的数据库凭据触发包?提前感谢您的帮助!!

【问题讨论】:

    标签: ssis azure-data-factory-2


    【解决方案1】:

    在非 ADF 场景中,create_execution 调用接受 @reference_id 参数

    您可以通过查询 SSISDB 来判断该值

    SELECT ER.reference_id
    FROM SSISDB.catalog.folders AS F
    INNER JOIN SSISDB.catalog.environments AS E
    ON E.folder_id = F.folder_id
    INNER JOIN SSISDB.catalog.projects AS P
    ON P.folder_id = F.folder_id
    INNER JOIN SSISDB.catalog.environment_references AS ER
    ON ER.project_id = P.project_id
    WHERE F.name = 'MyFolder' AND E.name = 'EnvDemo' AND P.name = 'MyIspac'
    

    把它们放在一起,你的脚本可能看起来像

    DECLARE @return_value INT, @exe_id BIGINT, @err_msg NVARCHAR(150), @refid bigint;
    
    SELECT @refid = ER.reference_id
    FROM SSISDB.catalog.folders AS F
    INNER JOIN SSISDB.catalog.environments AS E
    ON E.folder_id = F.folder_id
    INNER JOIN SSISDB.catalog.projects AS P
    ON P.folder_id = F.folder_id
    INNER JOIN SSISDB.catalog.environment_references AS ER
    ON ER.project_id = P.project_id
    WHERE F.name = 'MyFolder' AND E.name = 'EnvDemo' AND P.name = 'MyIspac';
    
    EXEC @return_value=[SSISDB].[catalog].[create_execution] 
    @folder_name=N'xxx', 
    @project_name=N'xxx', 
    @package_name=N'xxx.dtsx', 
    @reference_id = @refid
    @use32bitruntime=0, @runinscaleout=1, @useanyworker=1, @execution_id=@exe_id OUTPUT
    

    未经 ADF 测试,但它应该工作。否则请告诉我,我会看看我是否可以提供一些关于横向扩展方案的文档

    【讨论】:

    • 嗨,blinkc。谢谢你的帮助!!通过在集成目录中编写 SSIS 包的执行脚本,我们得到了正确的执行查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2010-10-29
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多