从 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_category
、sp_update_job
或 sp_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包不会运行