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

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

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

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

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

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

提前致谢。

【问题讨论】:

    标签: sql sql-server sql-server-2005 ssis sql-server-agent


    【解决方案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,为了更有效地帮助其他成员解决您的问题,请编辑您的问题并添加更多详细信息,因为代码无法满足您的需求。欢迎来到 StackOverflow :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多