【问题标题】:Pass a Parameter(s) to SQL Agent Job将参数传递给 SQL 代理作业
【发布时间】:2011-11-02 19:13:37
【问题描述】:

我发现一个帖子声称可以pass parameters to a SQL Agent Job,但没有包含“如何”。有人能解释一下这是怎么做到的吗?

在我的场景中,我需要一个存储过程来调用 SQL 代理并传递一个参数。反过来,SQL 代理作业必须将参数传递给 SSIS 包步骤。

我听说的另一种方法是让存储的 proc 将值写入表,然后让 SQL 代理作业(或它调用的 SSIS 包)从表中读取这些值。如果必须的话,我会采用后一种方法,尽管它很笨拙。

更新: 本练习的目的是形成一个集成测试,包括 (a) 提供包配置文件的 SQL 代理作业和 (b) 需要包配置文件中的值的 SSIS 包。因此我不想直接调用 SSIS 包。此外,测试人员无权直接启动 SQL 代理作业,也不应允许他们动态创建 SQL 代理作业。 sproc(合法地)规避了权限问题。最后,集成测试可以针对数十个 SSIS 包之一,但在我的环境中拥有数十个 SQL 代理作业定义是不切实际的。因此,sproc 启动 SQL Agent 作业,参数指示要启动哪个 SSIS 包。

【问题讨论】:

  • 可以多人同时运行这个存储过程吗?
  • SSIS 有什么不是很杂乱的东西吗?
  • 您要解决的问题是什么?

标签: sql-server tsql parameters ssis


【解决方案1】:

看来您应该使用 SSIS 包配置功能。您的存储过程可以更新配置值。

【讨论】:

  • 需要详细说明吗?
【解决方案2】:

另一种方法是使用作业步骤中设置的 SSIS 参数动态创建作业。这样做的一个可能优势是作业是持久的,因此如果有关于参数是什么的问题或疑问,作业就在附近,您可以调试作业/作业步骤创建逻辑。

如果代理只是运行 SSIS 包的一种方式,那么我上次演出中的 DBA 创建了 2 个过程,即 RunSSISPackage 和 RunSSISPackage32,它们只是调用 dtexec 以运行传递所有提供参数的包。

GiiM 的方法也同样有效,但在我们知道您要解决什么问题之前,很难说什么是更好的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2011-09-19
    相关资源
    最近更新 更多