як запланувати роботу, щоб запит sql запускався щодня?


121

Мені потрібно знати, як зробити щоденний запуск SQL-запиту, використовуючи завдання агента SQL Server, з мінімальними необхідними налаштуваннями конфігурації.


яку версію SQL Server ви використовуєте?
Фабер

1
Ось рішення для експрес - видання: stackoverflow.com/a/7201189/259881
HasanG

Відповіді:


164
  1. Розгорніть вузол агента SQL Server і клацніть правою кнопкою миші вузол Jobs в агенті SQL Server і виберіть 'New Job'

  2. У 'New Job'вікні введіть назву завдання та опис на 'General'вкладці.

  3. Виберіть 'Steps'у лівій частині вікна та натисніть 'New'внизу.

  4. У 'Steps'вікні введіть ім'я кроку та виберіть базу даних, з якою потрібно запустити запит.

  5. Вставте команду T-SQL, яку потрібно запустити у вікно Command та натисніть 'OK'.

  6. Клацніть на 'Schedule'меню зліва у вікні Нова робота та введіть інформацію про розклад (наприклад, щодня та час).

  7. Клацніть 'OK'- і це повинно бути.

(Звичайно, можна додати й інші варіанти - але я б сказав, що це мінімальний мінімум, який вам потрібен, щоб встановити та запланувати роботу)


як це зробити на сервері sql express? агент приходить з серверним експресом sql із розширеними послугами '?'
Білал Фазлані

6
Само собою зрозуміло, що залежно від того, на кого ви ввійшли, ви, можливо, взагалі не зможете побачити вузол агента SQL Server ... Не всі входять у систему як власне. Детальна
Fetchez la vache

якщо вузол агента SQL Server не розширюється з міткою "Агент XP вимкнено", запустіть цей код sp_configure "показати розширені параметри", 1; ПОВЕРНУТИСЯ; GO sp_configure "Агент XP", 1; GO RECONFIGURE GO Пояснення знаходиться за цим посиланням: msdn.microsoft.com/en-us/library/ms178127.aspx
Barry Guvenkaya

4
Можливо, використовуючи сценарії BAT, CMD, Powershell, щоб зробити це програмно
Kiquenet

115

Я зробив анімований GIF кроків у прийнятій відповіді. Це з MSSQL Server 2012

Розклад роботи SQL


8
GIF - як креативний! :)
Zeek2

9
Це має бути найвигіднішою відповіддю у стартовому потоці.
Гутхем Ануш

1
Чи потрібно входити в систему з sa? Я не входжу в систему sa, і я не бачив агента сервера sql. Я думаю, що я не маю достатньо прав, щоб побачити це.
Альпер

1
Щоб побачити область агента SQL Server у дереві меню, користувачеві, у якого ви ввійшли в систему, потрібні правильні дозволи для бази даних MSDB (MSDB - це вбудована база даних, яку SSMS використовує для таких речей, як дозволи). Перейдіть на сторінку "Провідник головного дерева" у розділі Безпека> Логіни> ваше ім'я користувача> клацніть правою кнопкою миші> Властивості> відображення користувачів> check msdb> потім нижче перевірити SQLAgentOperatorRole
S.Mason

19

Для цього в t-sql ви можете використовувати наступні збережені в системі процедури для планування щоденної роботи. Цей приклад планує щодня о 1:00 ранку. Докладніше про синтаксис окремих збережених процедур та дійсний діапазон параметрів див. У довідці 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: Моє завдання - виконання збереженої процедури. Ви можете легко змінити, @commandщоб запустити 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

Ось зразок коду:

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

21
додавання пояснення коду у відповідь, як правило, є хорошою ідеєю (навіть якщо це вам здається).
Натан Х'юз

Ця відповідь не містить достатнього пояснення. Без достатнього пояснення читачі не можуть зрозуміти цю відповідь.
Джино Шаджі

-2

якщо ви хочете щодня створювати резервну копію // наступного зберігання скриптів sql у 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

відкрийте планувальник завдань

створити завдання-> виберіть 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"

потім натисніть кнопку ОК

сценарій буде виконуватися вчасно, який ви вибираєте на вкладці Тригер щодня

насолоджуйся цим.............

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.