我发现一篇帖子声称有可能pass parameters to a SQL Agent Job,但没有包含“怎么样”。有人能解释一下这是怎么做到的吗?
在我的场景中,我需要一个存储过程来调用SQL代理并传递一个参数。反过来,SQL Agent作业必须将参数传递给SSIS包步骤。
我听说过的替代方法是将存储的proc写入值写入表,然后让SQL Agent作业(或它调用的SSIS包)从表中读取这些值。如果必须的话,我将采用后一种方法,尽管它很糟糕。
更新 本练习的动机是形成一个集成测试,包括(a)提供包配置文件的SQL Agent作业和(b)需要包配置文件中的值的SSIS包。因此,我不想直接调用SSIS包。此外,测试人员既没有直接启动SQL代理作业的权限,也不允许他们动态创建SQL代理作业。 sproc(合法地)规避了许可问题。最后,集成测试可以针对数十个SSIS包中的一个,但在我的环境中拥有数十个SQL Agent作业定义是不实际的。 Ergo,一个sproc启动SQL Agent作业,参数指示要启动的SSIS包。
答案 0 :(得分:2)
好像你应该使用SSIS包配置功能。您的存储过程可以更新配置值。
答案 1 :(得分:0)
另一种方法可以是使用作业步骤中设置的SSIS参数动态创建作业。这样做的一个可能的优点是作业是持久的,因此如果存在关于参数是什么的问题或疑问,则作业就在您身边,您可以调试作业/作业步骤创建逻辑。
如果Agent只是运行SSIS包的一种方法,那么我上次演出的DBA创建了2个procs,RunSSISPackage和RunSSISPackage32,除了调用dtexec运行一个传递所有提供参数的包之外什么也没做。
还有GiiM的方法可以同样有效,但在我们知道您试图解决的问题之前,很难说明什么是更好的方法。