I'm trying to create a job that will run based on the online status of a database. For example, step 1 will check if the database is online; if the database is online, it will run the rest of the steps, otherwise, it will report the job as successful.
Well you could set step 1 to be:
DECLARE @dbState TINYINT;
SELECT @dbState = state FROM sys.databases WHERE name = N'dbname';
IF @dbState = 0
BEGIN
RAISERROR('Database is online.', 11, 1);
END
Set the properties of step 1 to be:
Step 2 -> n-1 would do their normal things. Step n-1 might quit the job with success on success, or move to step N on success.
Step N could be as simple as:
PRINT 1;
...and would be set to quit the job with success.
Typically I use the On Success/On Failure to control the flow. If you have different branches, at the end of each "branch" there has to be a NO-OP step which goes to the continuation:
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
Needless to day, managing this linear flow with GOTO is not grewat for complex logic flows.
http://www.sqlservercentral.com/articles/Stairway+Series/72457/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With