SQLクエリのジョブを毎日実行するようにスケジュールする方法


回答:


164
  1. SQL Serverエージェントノードを展開し、SQL Serverエージェントでジョブノードを右クリックして、 'New Job'

  2. では'New Job'、ウィンドウジョブの名前と説明上の入力'General'タブを。

  3. 'Steps'ウィンドウの左側を選択して'New'、下部をクリックします。

  4. では'Steps'、ウィンドウステップ名を入力し、クエリはに対して実行するデータベースを選択します。

  5. 実行するT-SQLコマンドをコマンドウィンドウに貼り付けて、をクリックします'OK'

  6. [ 'Schedule'新しいジョブ]ウィンドウの左側にあるメニューをクリックして、スケジュール情報(毎日、時間など)を入力します。

  7. 'OK'-をクリックしてください。

(もちろん他にも追加できるオプションがありますが、ジョブをセットアップしてスケジュールするために必要な最低限のオプションです)


SQL Server Expressでそれを行う方法は?エージェントは高度なサービスを備えたSQL Server Expressに付属していますか?
ビラルFazlani 2013年

6
言うまでもなく、ログオンするユーザーによっては、SQL Serverエージェントノードをまったく表示できない場合があります...全員がsaとしてログオンするわけではありません。さらに、(むしろドライ)...こちらの情報msdn.microsoft.com/en-us/library/ms188283.aspx
FetchezラVACHE

SQL Serverエージェントノードが「エージェントXPが無効」というラベルで展開できない場合は、このコードを実行します。sp_configure 'show advanced options'、1; GO RECONFIGURE; GO sp_configure 'Agent XPs'、1; GO RECONFIGURE GO説明はこのリンクの下にあります:msdn.microsoft.com/en-us/library/ms178127.aspx
Barry Guvenkaya

4
多分プログラムで
Powershell

115

承認された回答のステップのアニメーションGIFを作成しました。これはMSSQL Server 2012からのものです

SQLジョブのスケジュール


8
GIF-なんてクリエイティブなの!:)
Zeek2 2018年

9
これは、stackoverflowで最も支持されている答えです。
Goutham Anush

1
saでログインする必要がありますか?saでログインしていないので、SQLサーバーエージェントが表示されませんでした。私にはそれを見るのに十分な権利がないと思います。
アルパー、

1
メニューツリーのSQL Serverエージェント領域を表示するには、ログインしているユーザーにMSDBデータベースに対する適切な権限が必要です(MSDBは、SSMSが権限などに使用する組み込みデータベースです)。メインツリーエクスプローラーから、[セキュリティ]> [ログイン]> [ユーザー名]> [右クリック]> [プロパティ]> [ユーザーマッピング]> [msdbをチェック]> [SQLAgentOperatorRole
S.Mason

18

これをt-sqlで行うには、次のシステムストアドプロシージャを使用して、毎日のジョブをスケジュールします。この例では、毎日午前1時にスケジュールします。個々のストアドプロシージャの構文と有効なパラメーターの範囲の詳細については、Microsoftのヘルプを参照してください。

DECLARE @job_name NVARCHAR(128), @description NVARCHAR(512), @owner_login_name NVARCHAR(128), @database_name NVARCHAR(128);

SET @job_name = N'Some Title';
SET @description = N'Periodically do something';
SET @owner_login_name = N'login';
SET @database_name = N'Database_Name';

-- Delete job if it already exists:
IF EXISTS(SELECT job_id FROM msdb.dbo.sysjobs WHERE (name = @job_name))
BEGIN
    EXEC msdb.dbo.sp_delete_job
        @job_name = @job_name;
END

-- Create the job:
EXEC  msdb.dbo.sp_add_job
    @job_name=@job_name, 
    @enabled=1, 
    @notify_level_eventlog=0, 
    @notify_level_email=2, 
    @notify_level_netsend=2, 
    @notify_level_page=2, 
    @delete_level=0, 
    @description=@description, 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@owner_login_name;

-- Add server:
EXEC msdb.dbo.sp_add_jobserver @job_name=@job_name;

-- Add step to execute SQL:
EXEC msdb.dbo.sp_add_jobstep
    @job_name=@job_name,
    @step_name=N'Execute SQL', 
    @step_id=1, 
    @cmdexec_success_code=0, 
    @on_success_action=1, 
    @on_fail_action=2, 
    @retry_attempts=0, 
    @retry_interval=0, 
    @os_run_priority=0, 
    @subsystem=N'TSQL', 
    @command=N'EXEC my_stored_procedure; -- OR ANY SQL STATEMENT', 
    @database_name=@database_name, 
    @flags=0;

-- Update job to set start step:
EXEC msdb.dbo.sp_update_job
    @job_name=@job_name, 
    @enabled=1, 
    @start_step_id=1, 
    @notify_level_eventlog=0, 
    @notify_level_email=2, 
    @notify_level_netsend=2, 
    @notify_level_page=2, 
    @delete_level=0, 
    @description=@description, 
    @category_name=N'[Uncategorized (Local)]', 
    @owner_login_name=@owner_login_name, 
    @notify_email_operator_name=N'', 
    @notify_netsend_operator_name=N'', 
    @notify_page_operator_name=N'';

-- Schedule job:
EXEC msdb.dbo.sp_add_jobschedule
    @job_name=@job_name,
    @name=N'Daily',
    @enabled=1,
    @freq_type=4,
    @freq_interval=1, 
    @freq_subday_type=1, 
    @freq_subday_interval=0, 
    @freq_relative_interval=0, 
    @freq_recurrence_factor=1, 
    @active_start_date=20170101, --YYYYMMDD
    @active_end_date=99991231, --YYYYMMDD (this represents no end date)
    @active_start_time=010000, --HHMMSS
    @active_end_time=235959; --HHMMSS

2
驚くばかり。まさに私が必要とするもの。ありがとうございます:)
AJ。

9

T-SQLの使用:私のジョブはストアドプロシージャを実行しています。@commandSQLを実行するように簡単に変更できます。

EXEC msdb.dbo.sp_add_job  
   @job_name = N'MakeDailyJob',   
   @enabled = 1,   
   @description = N'Procedure execution every day' ; 

 EXEC msdb.dbo.sp_add_jobstep  
    @job_name = N'MakeDailyJob',   
    @step_name = N'Run Procedure',   
    @subsystem = N'TSQL',   
    @command = 'exec BackupFromConfig';

 EXEC msdb.dbo.sp_add_schedule  
    @schedule_name = N'Everyday schedule',   
    @freq_type = 4,  -- daily start
    @freq_interval = 1,
    @active_start_time = '230000' ;   -- start time 23:00:00

 EXEC msdb.dbo.sp_attach_schedule  
   @job_name = N'MakeDailyJob',  
   @schedule_name = N'Everyday schedule' ;

 EXEC msdb.dbo.sp_add_jobserver  
   @job_name = N'MakeDailyJob',  
   @server_name = @@servername ;

-1

これがサンプルコードです:

Exec sp_add_schedule
    @schedule_name = N'SchedulName' 
    @freq_type = 1
    @active_start_time = 08300

21
解答にコードの説明を追加することは、(たとえそれがあなたにとって明らかであっても)通常は良い考えです。
Nathan Hughes

この回答には十分な説明が含まれていません。十分な説明がないと、読者はこの答えを理解できません。
Jino Shaji 2017年

-2

毎日のバックアップが必要な場合// C:\ Users \ admin \ Desktop \ DBScript \ DBBackUpSQL.sqlに次のSQLスクリプトストア

DECLARE @pathName NVARCHAR(512),
 @databaseName NVARCHAR(512) SET @databaseName = 'Databasename' SET @pathName = 'C:\DBBackup\DBData\DBBackUp' + Convert(varchar(8), GETDATE(), 112) + '_' + Replace((Convert(varchar(8), GETDATE(), 108)),':','-')+ '.bak' BACKUP DATABASE @databaseName TO DISK = @pathName WITH NOFORMAT, 
INIT, 
NAME = N'', 
SKIP, 
NOREWIND, 
NOUNLOAD, 
STATS = 10 
GO

タスクスケジューラを開く

タスクの作成->選択Triggersタブ選択New

ボタン毎日のラジオボタンを選択

Okボタンをクリック

次に、[ Action新規選択] タブをクリックします。

ボタンプログラム/スクリプトのテキストボックスに"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE"-S ADMIN-PC -iを配置"C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"します(ファイルのパスを一致させ、二重引用符で囲まれたパスを開始->検索ボックスに配置します。検索ボックスが見つかったら、クリックしてバックアップがあるかどうかを確認します。 )

-上記のパスは挿入される可能性があります100書き込み90 "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"

次に[OK]ボタンをクリックします

スクリプトは、毎日[トリガー]タブで選択した時間に実行されます

楽しめ.............

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.