【问题标题】:Run SSIS Package from T-SQL从 T-SQL 运行 SSIS 包
【发布时间】:2010-04-20 18:03:56
【问题描述】:

我注意到您可以使用以下存储过程(按顺序)来安排 SSIS 包:

msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
msdb.dbo.sp_add_job ...
msdb.dbo.sp_add_jobstep ...
msdb.dbo.sp_update_job ...
msdb.dbo.sp_add_jobschedule ...
msdb.dbo.sp_add_jobserver ...

(您可以通过右键单击计划作业并选择“将作业编写为 -> 创建到”来查看示例。)

您可以使用 sp_start_job 立即执行作业,有效地按需运行 SSIS 包。

问题:有谁知道任何 msdb.dbo.[...] 存储过程,它们只允许您在不直接使用 sp_cmdshell 或一些更简单的方法的情况下即时运行 SSIS 包?

【问题讨论】:

    标签: tsql ssis


    【解决方案1】:

    好吧,您并不严格需要 sp_add_categorysp_update_jobsp_add_jobschedule 调用。我们使用 SQL 代理在我们的应用程序中按需执行包,调用顺序如下:

     - sp_add_job 
     - sp_add_jobstep
     - sp_add_jobserver 
     - sp_start_job
    

    如果您无法访问 msdb..sysjobXXX 表,则获取作业状态有点棘手,但我们的作业可以正常启动和运行。

    编辑:: 除了 xp_cmdshell,我不知道从 SQL Server 内部启动 SSIS 处理程序的另一种方法。任何拥有服务器权限的人都可以启动 dtexec 或 dtutil 可执行文件;然后你可以使用批处理文件、作业调度程序等。

    【讨论】:

      【解决方案2】:

      不是真的...您可以尝试 sp_OACreate 但它更复杂,可能不会这样做。

      您需要从 SQL 运行它们吗?它们可以从命令行、.net 应用程序等运行

      【讨论】:

      • 我们宁愿从 SQL 中执行它,也不愿为我们的 Web 服务器提供方法。我们的 Web 服务器与 SQL 服务器不在同一个 ms 域中(甚至不在同一个网络上)。
      【解决方案3】:

      在 SQL Server 2012+ 中,可以使用以下函数(位于 SSISDB 数据库中,而不是 msdb 数据库中)来创建 SSIS 执行作业、初始化它们的参数并开始它们的执行:

      [catalog].[create_execution]

      [catalog].[set_execution_parameter_value]

      [catalog].[start_execution]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-23
        • 1970-01-01
        • 1970-01-01
        • 2013-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多