jak zaplanować codzienne uruchamianie zapytania sql?

Odpowiedzi:

164
  1. Rozwiń węzeł SQL Server Agent i kliknij prawym przyciskiem myszy węzeł Zadania w programie SQL Server Agent i wybierz 'New Job'

  2. W 'New Job'oknie wprowadź nazwę zlecenia oraz opis na 'General'zakładce.

  3. Wybierz 'Steps'po lewej stronie okna i kliknij 'New'u dołu.

  4. W 'Steps'oknie wprowadź nazwę kroku i wybierz bazę danych, dla której ma być uruchamiane zapytanie.

  5. Wklej polecenie T-SQL, które chcesz uruchomić, do okna poleceń i kliknij 'OK'.

  6. Kliknij 'Schedule'menu po lewej stronie okna Nowe zadanie i wprowadź informacje o harmonogramie (np. Codziennie i o godzinie).

  7. Kliknij 'OK'- i to powinno być na tyle.

(Są oczywiście inne opcje, które możesz dodać - ale powiedziałbym, że jest to absolutne minimum potrzebne do skonfigurowania i zaplanowania pracy)

L-Note
źródło
jak to zrobić na sql server express? czy agent jest dostarczany z serwerem sql express z zaawansowanymi usługami?
Bilal Fazlani,
6
Jest rzeczą oczywistą, że w zależności od tego, jako kto się logujesz, możesz w ogóle nie widzieć węzła agenta programu SQL Server… Nie wszyscy logują się jako sa. Więcej (raczej suchych) informacji tutaj .. msdn.microsoft.com/en-us/library/ms188283.aspx
Fetchez la vache
jeśli węzła agenta programu SQL Server nie można rozszerzyć z etykietą „Wyłączono agenta XP”, uruchom ten kod sp_configure 'pokaż opcje zaawansowane', 1; GO RECONFIGURE; GO sp_configure 'Agent XPs', 1; GO RECONFIGURE GO Wyjaśnienie znajduje się pod tym linkiem: msdn.microsoft.com/en-us/library/ms178127.aspx
Barry Guvenkaya
4
Może używając skryptów BAT, CMD, Powershell do robienia tego programowo
Kiquenet
115

Zrobiłem animowany GIF z kroków w zaakceptowanej odpowiedzi. To pochodzi z MSSQL Server 2012

Zaplanuj zadanie SQL

S.Mason
źródło
8
GIF - jakie kreatywne! :)
Zeek2
9
To powinna być najbardziej pozytywna odpowiedź w stackoverflow.!
Goutham Anush
1
Czy trzeba się logować za pomocą sa? Nie loguję się przez sa i nie widzę agenta serwera SQL. Myślę, że nie mam wystarczających praw, aby to zobaczyć.
Alper
1
Aby zobaczyć obszar agenta programu SQL Server w drzewie menu, użytkownik, do którego jesteś zalogowany, potrzebuje odpowiednich uprawnień w bazie danych MSDB (MSDB to wbudowana baza danych, której program SSMS używa do takich celów, jak uprawnienia). Z głównego eksploratora drzewa przejdź do Security> Logins> your-username> kliknij prawym przyciskiem myszy> properties> user mappings> check msdb> następnie poniżej sprawdź SQLAgentOperatorRole
S.Mason
19

Aby to zrobić w t-sql, możesz zaplanować codzienne zadanie za pomocą następujących procedur składowanych w systemie. Ten przykład planuje codziennie o 1:00. Szczegółowe informacje na temat składni poszczególnych procedur składowanych i prawidłowych zakresów parametrów można znaleźć w pomocy firmy 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
Doug Lampe
źródło
2
niesamowite. dokładnie to, czego potrzebuję. Dziękuję :)
AJ.
9

Korzystanie z T-SQL: Moje zadanie wykonuje procedurę składowaną. Możesz łatwo zmienić, @commandaby uruchomić swój sql.

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 ;
efysis
źródło
-1

Oto przykładowy kod:

Exec sp_add_schedule
    @schedule_name = N'SchedulName' 
    @freq_type = 1
    @active_start_time = 08300
gangster
źródło
21
dodanie wyjaśnienia kodu do odpowiedzi jest zwykle dobrym pomysłem (nawet jeśli jest to dla Ciebie oczywiste).
Nathan Hughes
Ta odpowiedź nie zawiera wystarczającego wyjaśnienia. Bez wystarczającego wyjaśnienia czytelnicy nie mogą zrozumieć tej odpowiedzi.
Jino Shaji
-2

jeśli chcesz codziennie tworzyć kopie zapasowe // po zapisaniu skryptów sql w C: \ Users \ admin \ Desktop \ DBScript \ DBBackUpSQL.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

otwórz Harmonogram zadań

utwórz zadanie-> wybierz Triggerszakładkę Wybierz New.

Przycisk Wybierz Codziennie Przycisk opcji

kliknij Okprzycisk

następnie kliknij Actionzakładkę Wybierz nowy.

Przycisk Umieść "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE"-S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"w polu tekstowym programu / skryptu (upewnij się, że dopasuj ścieżkę do plików i umieść ścieżkę w podwójnych cudzysłowach w polu start-> wyszukiwania, a jeśli znajdzie, kliknij ją i zobacz, czy kopia zapasowa istnieje, czy nie )

- do powyższej ścieżki można wstawić 100 zapis 90 "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" -S ADMIN-PC -i "C:\Users\admin\Desktop\DBScript\DBBackUpSQL.sql"

następnie kliknij przycisk OK

Skrypt będzie wykonywany codziennie o czasie wybranym na karcie Wyzwalanie

baw się dobrze .............

pravin Dukare
źródło