Как создать агент SQL Server без использования графического интерфейса? - PullRequest
3 голосов
/ 26 августа 2009

Я использую Angel LMS и он построен на платформе SQL Server. Я верю своему 2005 году, но не уверен на 100% в этом.

В любом случае, возможно, мой псевдокод пролил свет на этот ответ. Также одинарные кавычки должны использоваться для строк, а объединенный символ +.

Мне нужно, чтобы что-то запускалось 2-5 раз в день (частота пока не определена, но вы поняли). Вот блок транзакций / псевдокод:

BEGIN TRANSACTION
BEGIN TRY

<select statement>
<update statement>
<delete statement>
<insert statement>

COMMIT TRANSACTION
END TRY
BEGIN CATCH
        ROLLBACK TRANSACTION
        DECLARE @Msg NVARCHAR(MAX)  
        SELECT @Msg=ERROR_MESSAGE() 
        RAISERROR('Error Occured: %s', 20, 101,@msg) WITH LOG
END CATCH

Мой единственный доступ к базе данных, это текстовое поле, которое запускает команды sql. Я могу создавать и удалять таблицы, запускать блоки транзакций и, очевидно, выбирать / вставлять / обновлять / удалять. Я не могу найти никаких команд для создания агента, но только шаги, если вы используете Enterprise Manager или как называется GUI.

Кроме того, некоторые справки о том, как манипулировать расписанием агента, могут помочь. Когда я проверяю его, я хочу, чтобы он запускался каждые пятнадцать минут или около того.


EDIT
EXEC dbo.sp_add_job @ job_name = N'test 'вернул ошибку
Не удалось найти хранимую процедуру 'dbo.sp_add_job'.

Ответы [ 2 ]

10 голосов
/ 26 августа 2009

Если вам нужно создать задание SQL в агенте SQL Server (при условии, что у вас есть права), вам нужно создать следующее:

1) Сама работа 2) шаг в работе для запуска кода SQL 3) График, когда его запускать.

Для этого необходимы следующие хранимые процедуры (рабочий пример):

BEGIN TRY
    BEGIN TRAN

    DECLARE @jobId BINARY(16)

    --Add job
    EXEC msdb.dbo.sp_add_job @job_name=N'Job Name', @job_id = @jobId OUTPUT

    --Add step to job
    EXEC msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Do SQL Stuff', 
            @step_id=1, 
            @subsystem=N'TSQL', 
            @command=N'SELECT ''Hello, I am a query'';', 
            @database_name=N'DB_Name', 
            @flags=0

    --Add schedule to job
    EXEC msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Mon-Fri 6:00AM to 7:00PM, every hour', 
            @freq_type=8, 
            @freq_interval=62, 
            @freq_subday_type=8, 
            @freq_subday_interval=1, 
            @freq_relative_interval=0, 
            @freq_recurrence_factor=1, 
            @active_start_date=20090403, 
            @active_end_date=99991231, 
            @active_start_time=60000, 
            @active_end_time=190000

    COMMIT TRAN
END TRY
BEGIN CATCH
    SELECT ERROR_Message(), ERROR_Line();
    ROLLBACK TRAN
END CATCH

Что касается самих sprocs, вы можете проверить синтаксис здесь:

sp_add_job

sp_add_jobstep

sp_add_jobschedule

Это немного сложно, но это должно помочь вам.

1 голос
/ 26 августа 2009

Прежде всего, вам необходимо установить, является ли SQL Server Express Edition, поскольку SQL Express не имеет функциональности агента SQL.

В своем командном окне выполните следующую команду:

SELECT @@version

Результат будет содержать информацию об издании.

Если у вас есть Express, вам нужно будет найти другой способ запуска ваших команд - возможно, с использованием SQLCMD и планировщика Windows или одной из нескольких сторонних замен для агента SQL в SQL Express - если вы Google "sql express agent", вы найдете несколько. У меня нет с ними опыта, поэтому я не могу рекомендовать его.

Если у вас выпуски Standard или Enterprise, шаги по созданию заданий агента SQL через T-SQL можно найти здесь .

...