6

我需要创建一个 SQL 作业。

Step1: 在TaskToProcess表中插入一行并返回ProcessID(PK and Identity)

Step2:取回step1 生成的ProcessID,将值传递给SSIS包,执行SSIS包。

这在 SQL Server JOB 中可能吗?

请帮助我

提前致谢。

4

2 回答 2

3

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

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

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

编辑

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

于 2011-05-21T09:28:00.903 回答
1

类似于Ed Harper 的回答,但在“工作步骤中的变量”MSDN 论坛帖子中找到了一些详细信息

对于工作环境,某些流程键控表(使用 job_id)或全局临时表似乎最有用。当然,我意识到您可能不想让某些东西“全球”可用。如有必要,您还可以考虑加密或混淆您存储的值。使用后请务必删除该行。

进程键控表在文章“如何在存储过程之间共享数据”中进行了描述

Send parameters to SQL server agent jobs/job steps MSDN forum thread to create a table to hold the parameters中的另一个建议,例如:

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 中进行选择以获取必要的值。

于 2016-11-23T10:18:39.640 回答