SQL Server 代理作业:如何在不执行整个作业的情况下执行作业步骤

Posted

技术标签:

【中文标题】SQL Server 代理作业:如何在不执行整个作业的情况下执行作业步骤【英文标题】:SQL Server Agent Jobs: How to execute a job step without executing the entire job 【发布时间】:2011-06-20 14:39:44 【问题描述】:

我有一个以前有两个步骤的 SQL Server 代理作业。今天,我必须整合第三步,很快我将需要整合第四步。

我想确保该步骤将正确执行,但我不想执行整个作业。

前两个步骤需要相当长的时间来执行,并且在白天它们占用了我的用户需要的大量 SQL 资源。

有没有一种方法可以让我执行一个作业步骤而不是整个作业流程?

在 SSMS 中,如果我右键单击该作业,则会有一个选项显示“在步骤中启动作业...”,除非我尝试该选项时,它会弹出一个对话框,似乎暗示整个作业已完成开始了。我可以做些什么来测试工作中的一个步骤?

提前致谢。

【问题讨论】:

【参考方案1】:

“在步骤开始作业”将在您指定的步骤开始作业。但是 - 如果您不希望执行任何后续步骤 - 请务必调整步骤逻辑,以便在完成您开始的步骤后“退出报告成功”。

【讨论】:

好的,我知道它现在是如何工作的了。我之前使用过这种方法,回忆起来有点困惑。就像我之前提到的,我的第一步会占用大量资源,所以我不想尝试。感谢您的澄清。【参考方案2】:

在 SSMS 中:

从作业步骤复制代码(使用 ctrl + a 全选) 将代码粘贴到 SSMS 的新查询窗口中 运行代码

或者,如果您经常需要运行几个步骤。

将这些步骤放在一个单独的作业中,然后从另一个作业中启动一个作业以运行所有内容。使用EXEC msdb.dbo.sp_start_job N'job_name'

您可以按需运行简短的简单作业,并按计划运行完整的长时间作业

【讨论】:

【参考方案3】:

使用这个:

EXEC msdb.dbo.sp_start_job N'job_name' , 'step_name'

【讨论】:

这不仅仅运行一个给定的步骤,而且与通过 GUI 执行的操作相同,它在给定的步骤启动作业,并且随后将遵循作业的正常流程,因此除非您正在运行最后一步,如果您不更改逻辑,它可以运行作业中的所有步骤,具体取决于您从哪个步骤开始。 另外,此代码不正确。正确的代码是 Use this: EXEC msdb.dbo.sp_start_job N'job_name' , @step_name = 'step_name'【参考方案4】:

转到作业属性并手动执行该步骤。例如,有一个包含 16 个步骤的作业,而您想要运行第 12 个步骤,然后转到该作业属性并查看第 12 步究竟做了什么。如果它在命令提示符下执行批处理文件,请手动执行。但是这个逻辑不能在所有情况下都使用。

【讨论】:

【参考方案5】:
USE [**DB_NAME**]
GO

DECLARE @return_value int

EXEC @return_value = [dbo].[**STEP_NAME**]  

SELECT 'Return Value' = @return_value
GO

【讨论】:

您好 Cosi,为了更有效地帮助其他成员解决您的问题,请编辑您的问题并添加更多详细信息,因为代码无法满足您的需求。欢迎来到 *** :)

以上是关于SQL Server 代理作业:如何在不执行整个作业的情况下执行作业步骤的主要内容,如果未能解决你的问题,请参考以下文章

如何修改 SQL Server 代理主作业 (Transact-SQL)

sql 代理创建一个新的作业 执行SISS包

从存储过程执行 SQL Server 代理作业并返回作业结果

在SQL Sever复制数据库时出现启动、执行SQL Server代理作业错误的解决方法

SQL SERVER 2008复制数据库时发生执行SQL Server代理作业错误

翻译:通往SQL Server代理的阶梯-二级:作业步骤和子系统