如何在不使用GUI的情况下创建SQL Server代理?

Che*_*eso 3 sql command-line sql-server-agent transactions agent

我使用的是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
Run Code Online (Sandbox Code Playgroud)

我唯一访问数据库的是一个运行sql命令的文本框.我可以创建和删除表,运行事务块,显然选择/插入/更新/删除.我找不到任何创建代理的命令,但只能找到使用企业管理器或调用GUI的步骤.

此外,关于如何操纵代理的时间安排的一些参考将有所帮助.当我测试它时,我想将它设置为每十五分钟左右运行一次.


编辑
EXEC dbo.sp_add_job @ job_name = N'test'返回错误
无法找到存储过程'dbo.sp_add_job'.

Ano*_*246 10

如果需要在SQL Server代理中创建SQL作业(假设您拥有权限),则必须创建以下内容:

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
Run Code Online (Sandbox Code Playgroud)

至于sprocs本身,你会想看看这里的语法:

sp_add_job

SP_ADD_JOBSTEP

sp_add_jobschedule

这有点棘手,但这应该让你前进.