如何在sql Job中获取step1到step2的值

时间:2011-05-21 08:31:21

标签: sql-server-2008 ssis sql-job

我需要创建一个SQL JOB。

步骤1: 在TaskToProcess表中插入一行并返回ProcessID(PK和身份)

步骤2: 返回在 step1 中生成的ProcessID,并将该值传递给SSIS包并执行SSIS包。

这在SQL Server JOB中是否可能?

请帮我解决这个问题

提前致谢。

2 个答案:

答案 0 :(得分:2)

没有在作业步骤之间传递变量值的内置方法。但是,有几种解决方法。

一种选择是在步骤1结束时将值存储在表中,并在步骤2中从数据库中查询它。

听起来您正在通过插入表并返回插入行的ProcessID来生成SCOPE_IDENTITY()。如果作业步骤1是插入此表的唯一进程,则可以使用IDENT_CURRENT('<tablename>')函数从作业2中检索最后插入的值。

修改

如果多个进程可以插入到您的过程控制表中,最好的解决方案可能是将步骤1和2重构为一个步骤 - 可能使用控制SSIS主包(或其他等效技术),它可以在步骤之间传递变量

答案 1 :(得分:0)

Ed Harper's answer类似,但在"Variables in Job Steps" MSDN forum thread

中找到了一些详细信息
  

对于作业环境,有一些Process-Keyed Tables(使用   job_id)或全局临时表似乎最有用。当然,   我意识到你可能不希望在全球范围内留下一些东西&#39;   可用。如有必要,您还可以查看加密或   模糊您存储的值。务必删除该行一次   你已经用过它了。

过程密钥表在文章&#34; How to Share Data between Stored Procedure&#34;

中有所描述

Send parameters to SQL server agent jobs/job steps MSDN论坛帖子中的另一个建议是创建一个表来保存参数,例如:

CREATE TABLE SQLAgentJobParms
(job_id uniqueidentifier,
 execution_instance int,
 parameter_name nvarchar(100),
 parameter_value nvarchar(100),
 used_datetime datetime NULL); 
  

您的调用存储过程将传递给它的参数   并将它们插入SQLAgentJobParms。之后,它可以使用EXEC   sp_start_job。并且,如前所述,工作步骤将从中进行选择   SQLAgentJobParms获取必要的值。