6

データベースのオンライン ステータスに基づいて実行されるジョブを作成しようとしています。たとえば、手順 1 ではデータベースがオンラインかどうかを確認します。データベースがオンラインの場合、残りの手順が実行されます。それ以外の場合は、ジョブが成功したと報告されます。

4

3 に答える 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 に答える