我需要创建一个SQL JOB。
步骤1: 在TaskToProcess表中插入一行并返回ProcessID(PK和身份)
步骤2: 返回在 step1 中生成的ProcessID,并将该值传递给SSIS包并执行SSIS包。
这在SQL Server JOB中是否可能?
请帮我解决这个问题
提前致谢。
答案 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获取必要的值。