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)


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


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

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 ;

-1

Oto przykładowy kod:

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

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 .............

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.