как запланировать задание для ежедневного выполнения sql-запроса?

121

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

BOBJ-С
источник
какую версию SQL Server вы используете?
Faber
1
Вот решение для экспресс-выпуска: stackoverflow.com/a/7201189/259881
HasanG

Ответы:

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'- и все должно быть.

(Есть, конечно, и другие варианты, которые вы можете добавить, но я бы сказал, что это минимум, который вам нужен для настройки и планирования работы)

L-Примечание
источник
как это сделать на sql server express? агент поставляется с sql server express с расширенными услугами '?'
Билал Фазлани 04
6
Само собой разумеется, что в зависимости от того, под кем вы входите в систему, вы можете вообще не увидеть узел агента SQL Server ... Не все входят в систему как sa. Дополнительная (довольно сухая) информация здесь .. msdn.microsoft.com/en-us/library/ms188283.aspx
Fetchez la vache
если узел агента SQL Server не может быть расширен меткой «Агенты XP отключены», запустите этот код sp_configure 'show advanced options', 1; ПЕРЕКОНФИГУРИРОВАТЬ; GO sp_configure 'Agent XPs', 1; GO RECONFIGURE GO Объяснение по этой ссылке: msdn.microsoft.com/en-us/library/ms178127.aspx
Барри Гувенькая,
4
Возможно, используя сценарии BAT, CMD, Powershell, чтобы делать это программно
Kiquenet
115

Я сделал анимированный GIF из шагов из принятого ответа. Это из MSSQL Server 2012

Запланировать задание SQL

S.Mason
источник
8
GIF - как творчески! :)
Zeek2
9
Это должен быть самый популярный ответ в stackoverflow.!
Goutham Anush
1
Обязательно ли входить с помощью sa? Я не вхожу в систему с помощью sa и не видел агента сервера sql. Думаю, у меня недостаточно прав для просмотра.
Alper
1
Чтобы увидеть область агента SQL Server в дереве меню, пользователю, которому вы выполнили вход, необходимы правильные разрешения в базе данных MSDB (MSDB - это встроенная база данных, которую SSMS использует для таких вещей, как разрешения). В главном проводнике дерева перейдите в Безопасность> Логины> ваше-имя пользователя> щелкните правой кнопкой мыши> свойства> сопоставления пользователей> проверьте msdb> затем ниже проверьте SQLAgentOperatorRole
С.Мейсон
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 ;
efysis
источник
-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"

затем нажмите кнопку ОК

Скрипт будет выполняться ежедневно в установленное вами время на вкладке «Триггер».

наслаждайся этим.............

Правин Дукаре
источник