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-1会做正常的事情.步骤n-1可能在成功时成功退出工作,或者在成功时转到步骤N.
步骤N可以简单到:
PRINT 1;
Run Code Online (Sandbox Code Playgroud)
......并且会成功地辞掉这份工作.
通常我使用“成功时/失败时”来控制流程。如果您有不同的分支,则在每个“分支”的末尾必须有一个 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/