Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何在sql作业中获取步骤1到步骤2的值_Sql Server 2008_Ssis_Sql Job - Fatal编程技术网

Sql server 2008 如何在sql作业中获取步骤1到步骤2的值

Sql server 2008 如何在sql作业中获取步骤1到步骤2的值,sql-server-2008,ssis,sql-job,Sql Server 2008,Ssis,Sql Job,我需要创建一个SQL作业 步骤1: 在TaskToProcess表中插入一行并返回ProcessID(主键和标识) 第二步: 检索在步骤1中生成的ProcessID,并将值传递给SSIS包并执行SSIS包 这在SQL server作业中可能吗 请帮我做这个 提前感谢。没有在作业步骤之间传递变量值的内置方法。然而,有几个变通办法 一种选择是在步骤1结束时将值存储在表中,并在步骤2中从数据库中查询回来 听起来像是通过插入表并返回插入行的SCOPE\u IDENTITY()来生成ProcessID。如

我需要创建一个SQL作业

步骤1: 在TaskToProcess表中插入一行并返回ProcessID(主键和标识)

第二步: 检索在步骤1中生成的ProcessID,并将值传递给SSIS包并执行SSIS包

这在SQL server作业中可能吗

请帮我做这个


提前感谢。

没有在作业步骤之间传递变量值的内置方法。然而,有几个变通办法

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

听起来像是通过插入表并返回插入行的
SCOPE\u IDENTITY()
来生成
ProcessID
。如果作业步骤1是插入此表的唯一进程,则可以使用函数从作业2中检索上次插入的值

编辑

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

类似于,但在

对于作业环境,一些风格的进程键控表(使用 作业(id)或全局临时表似乎最有用。当然 我意识到你可能不想在“全球”留下一些东西 可用。如有必要,您还可以研究加密或 混淆存储的值。请确保删除该行一次 你已经用过了

文章“”中描述了进程键控表

MSDN论坛线程中的另一个建议是创建一个表来保存参数,例如:

CREATE TABLE SQLAgentJobParms
(job_id uniqueidentifier,
 execution_instance int,
 parameter_name nvarchar(100),
 parameter_value nvarchar(100),
 used_datetime datetime NULL); 
调用存储过程将获取传递给它的参数 并将它们插入SQLAgentJobParms。之后,它可以使用EXEC 启动作业。而且,如前所述,作业步骤将从 SQLAgentJobParms以获取必要的值


是的,这会有用的。。但是,如果任何其他进程(不是此作业)在步骤1和步骤2之间向表中插入一行,该怎么办?我的整个过程将不同,对吗?@VinnaKanna-是的,如果在步骤1和步骤2之间的表中插入另一个过程,那么步骤2将获取错误的值。另一种替代方法请参见我的编辑。是的,我喜欢您在编辑部分给出的解决方案。。谢谢,但到目前为止,我知道我们仍然可以在job中的步骤1中捕获返回的值Step2@VinnaKanna-如果步骤1和2从SSIS包运行,您应该能够将步骤1中的值返回到控制包中的变量中。