如何根据以前的SQL代理作业步骤的结果跳过作业步骤?

use*_*888 4 t-sql sql-server sql-agent-job

我正在尝试创建一个基于数据库在线状态运行的作业.例如,步骤1将检查数据库是否在线; 如果数据库在线,它将运行其余步骤,否则,它将报告作业成功.

Aar*_*and 14

那你可以设置第1步:

DECLARE @dbState TINYINT;
SELECT @dbState = state FROM sys.databases WHERE name = N'dbname';
IF @dbState = 0
BEGIN
  RAISERROR('Database is online.', 11, 1);
END
Run Code Online (Sandbox Code Playgroud)

将步骤1的属性设置为:

  • 如果成功,请转到第2步
  • 如果失败,请转到步骤N.

第2步 - > n-1会做正常的事情.步骤n-1可能在成功时成功退出工作,或者在成功时转到步骤N.

步骤N可以简单到:

PRINT 1;
Run Code Online (Sandbox Code Playgroud)

......并且会成功地辞掉这份工作.


Cad*_*oux 3

通常我使用“成功时/失败时”来控制流程。如果您有不同的分支,则在每个“分支”的末尾必须有一个 NO-OP 步骤来继续:

Step 1 - Some Op - On Failure Goto Step 4, On Success Go to next step
Step 2 - Some Op
Step 3 - Goto continuation step
Step 4 - Some op
...
Step n - Continnuation step
Step n+1 - finish the common processing
Run Code Online (Sandbox Code Playgroud)

不用说,使用 GOTO 管理这种线性流程对于复杂的逻辑流程来说并没有增长。

http://www.sqlservercentral.com/articles/Stairway+Series/72457/