データベースのオンライン ステータスに基づいて実行されるジョブを作成しようとしています。たとえば、手順 1 ではデータベースがオンラインかどうかを確認します。データベースがオンラインの場合、残りの手順が実行されます。それ以外の場合は、ジョブが成功したと報告されます。
28934 次
3 に答える
16
ステップ 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
ステップ 1 のプロパティを次のように設定します。
- 成功したら、ステップ 2 に進みます
- 失敗した場合は、手順 N に進みます
ステップ 2 -> n-1 は通常のことを行います。ステップ n-1 は、成功するとジョブを終了するか、成功するとステップ N に移動します。
ステップ N は次のように単純です。
PRINT 1;
...そして、成功して仕事を辞めるように設定されます。
于 2012-05-01T01:58:40.917 に答える
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
言うまでもなく、GOTO を使用してこの線形フローを管理することは、複雑なロジック フローには適していません。
http://www.sqlservercentral.com/articles/Stairway+Series/72457/
于 2012-05-01T01:47:35.463 に答える
0
ジョブのステップ 1 に次のコードを配置します。プライマリ (DAG の名前を指定) かどうかを確認し、そうでない場合はジョブを停止します。
-- Do I wish this job to continue or not...
-- e.g. Is this the Primary in the DAG
-- If not, stop the job
DECLARE @rc int;
EXEC @rc = dbo.fn_hadr_group_is_primary N'DAG_001';
IF @rc = 0
BEGIN;
DECLARE @JobID uniqueidentifier
SELECT @JobID = $(ESCAPE_NONE(JOBID));
EXEC msdb.dbo.sp_stop_job @job_id = @JobID;
END;
于 2018-11-09T11:00:00.443 に答える