it-swarm.com.de

Wie plane ich einen Job für die tägliche Ausführung einer SQL-Abfrage?

Ich muss wissen, wie eine SQL-Abfrage täglich mit einem SQL Server-Agent-Auftrag ausgeführt wird, wobei die erforderlichen Konfigurationseinstellungen mindestens erforderlich sind.

105
Bobj-C
  1. Erweitern Sie den Knoten SQL Server-Agent, klicken Sie mit der rechten Maustaste auf den Knoten Jobs im SQL Server-Agent und wählen Sie 'New Job'

  2. In dem 'New Job' Fenster geben Sie den Namen des Jobs und eine Beschreibung auf dem 'General' tab.

  3. Wählen 'Steps' auf der linken Seite des Fensters und klicken Sie auf 'New' unten.

  4. In dem 'Steps' Fenster Geben Sie einen Schrittnamen ein und wählen Sie die Datenbank aus, für die die Abfrage ausgeführt werden soll.

  5. Fügen Sie den T-SQL-Befehl, den Sie ausführen möchten, in das Befehlsfenster ein und klicken Sie auf 'OK'.

  6. Klicken Sie auf die 'Schedule' Menü auf der linken Seite des Fensters Neuer Job und geben Sie die Zeitplaninformationen ein (z. B. täglich und eine Uhrzeit).

  7. Klicken 'OK' - und das sollte es sein.

(Es gibt natürlich auch andere Optionen, die Sie hinzufügen können - aber ich würde sagen, das ist das absolute Minimum, das Sie benötigen, um einen Job einzurichten und zu planen.)

149
L-Note

Ich habe ein animiertes GIF der Schritte in der akzeptierten Antwort erstellt. Dies ist von MSSQL Server 2012

Schedule SQL Job

70
S.Mason

Zu diesem Zweck können Sie in t-sql die folgenden gespeicherten Systemprozeduren verwenden, um einen täglichen Job zu planen. In diesem Beispiel wird täglich um 01:00 Uhr ein Zeitplan erstellt. Weitere Informationen zur Syntax der einzelnen gespeicherten Prozeduren und zum gültigen Parameterbereich finden Sie in der Microsoft-Hilfe.

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
    @[email protected]_name, 
    @enabled=1, 
    @notify_level_eventlog=0, 
    @notify_level_email=2, 
    @notify_level_netsend=2, 
    @notify_level_page=2, 
    @delete_level=0, 
    @[email protected], 
    @category_name=N'[Uncategorized (Local)]', 
    @[email protected]_login_name;

-- Add server:
EXEC msdb.dbo.sp_add_jobserver @[email protected]_name;

-- Add step to execute SQL:
EXEC msdb.dbo.sp_add_jobstep
    @[email protected]_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', 
    @[email protected]_name, 
    @flags=0;

-- Update job to set start step:
EXEC msdb.dbo.sp_update_job
    @[email protected]_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, 
    @[email protected], 
    @category_name=N'[Uncategorized (Local)]', 
    @[email protected]_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
    @[email protected]_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
14
Doug Lampe

Verwenden von T-SQL: Mein Job führt eine gespeicherte Prozedur aus. Sie können leicht ändern @command, um Ihre SQL auszuführen.

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 ;
8
efysis

Hier ist ein Beispielcode:

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