如何获取sql作业中step1到step2的值

发布于 2024-11-09 00:25:24 字数 256 浏览 0 评论 0 原文

我需要创建一个 SQL 作业。

第1步: 在 TaskToProcess 表中插入一行并返回 ProcessID(PK 和 Identity)

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

这在 SQL Server JOB 中可能吗?

请帮助我

提前致谢。

I need to create a SQL JOB.

Step1:
Insert a Row into TaskToProcess Table and return ProcessID(PK and Identity)

Step2:
Retrive the ProcessID which is generated in step1 and pass the value to SSIS package and execute the SSIS Package.

Is this Possible in SQL server JOB??

Please help me on this

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

牵你的手,一向走下去 2024-11-16 00:25:24

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

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

听起来您是通过插入表并返回 ProcessID 来生成 ProcessID插入行的 code>SCOPE_IDENTITY()。如果作业步骤 1 是插入此表的唯一进程,您可以使用 IDENT_CURRENT('') 函数。

编辑

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

There is no built-in method of passing variable values between job steps. However, there are a couple of workarounds.

One option would be to store the value in table at the end of step 1 and query it back from the database in step 2.

It sounds like you are generating ProcessID by inserting into a table and returning the SCOPE_IDENTITY() of the inserted row. If job step 1 is the only process inserting into this table, you can retrieve the last inserted value from job 2 using the IDENT_CURRENT('<tablename>') function.

EDIT

If multiple process could insert into your process control table, the best solution is probably to refactor steps 1 and 2 into a single step - possibly with a controlling SSIS master package (or other equivalent technology) which can pass the variables between steps.

我不在是我 2024-11-16 00:25:24

类似于 Ed Harper 的答案,但在“作业步骤中的变量”MSDN 论坛主题

对于工作环境,一些流程键控表(使用
job_id)或全局临时表似乎最有用。当然,
我意识到你可能不希望“全局”留下一些东西
可用的。如果有必要,您还可以考虑加密或
混淆您存储的值。确保删除该行一次
你已经用过它了。

进程键控表在文章“如何在存储过程之间共享数据

另一条建议 中进行了描述在 将参数发送到 SQL Server 代理作业/作业步骤 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 获取必要的值。

Similar to Ed Harper's answer, but some details found in "Variables in Job Steps" MSDN forum thread

For the job environment, some flavor of Process-Keyed Tables (using
the job_id) or Global Temporary Tables seems most useful. Of course,
I realize that you might not want to have something left 'globally'
available. If necessary, you could also look into encrypting or
obfuscating the value that you store. Be sure to delete the row once
you have used it.

The Process-Keyed Tables are described in article "How to Share Data between Stored Procedure"

Another suggestion in Send parameters to SQL server agent jobs/job steps MSDN forum thread to create a table to hold the parameters, such as:

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

Your calling stored procedure would take the parameters passed to it
and insert them into SQLAgentJobParms. After that, it could use EXEC
sp_start_job. And, as already noted, the job steps would select from
SQLAgentJobParms to get the necessary values.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文