从 T-SQL 运行 SSIS 包

Posted

技术标签:

【中文标题】从 T-SQL 运行 SSIS 包【英文标题】:Run SSIS Package from T-SQL 【发布时间】: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 包?

【问题讨论】:

【参考方案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]

【讨论】:

以上是关于从 T-SQL 运行 SSIS 包的主要内容,如果未能解决你的问题,请参考以下文章

从SQL Server代理作业步骤调用时,SSIS包不会运行

从 SQL Server Management Studio 2008 运行 SSIS 包

SSIS 包从文件系统运行

从 SSIS 运行 SQL 代理作业

安排 SSIS 包按计划运行

在 C# .NET 中运行 SSIS 包