天道酬勤,学无止境

Create SQL Server Agent jobs programatically

I want to create SQL Server Agent jobs programmatically. I am using the following code, while running it doesn't throw any error but when I check SQL Server Agent I don't see any jobs.

So question 1: is this the right way to create a job in msdb from etgv125p (my database) database?

When I use connectionString with Initial Catalog=msdb, I am getting an error

The EXECUTE permission was denied on the object 'CreateSQLAgentjobs', database 'msdb', schema 'dbo'

Question 2: what type of credentials do I need to have? I am already admin.

Code:

static void Main(string[] args)
{
    string connetionString = "Data Source=SERVER;Initial Catalog=etgv125p;User ID=USER;Password=PASSWORD;Application Name=LOCAL";
    //string connetionString = "Data Source=SERVER;Initial Catalog=msdb;User ID=USER;Password=PASSWORD;Application Name=LOCAL";

    SqlConnection cnn = new SqlConnection(connetionString);
    SqlCommand cmd = new SqlCommand();

    string job = "Test_Job";
    string command = "Test_StoredProc";
    string serverName = "SERVERNAME";
    string startDate = DateTime.Now.ToShortDateString();
    string startTime = DateTime.Now.TimeOfDay.ToString();

    try
    {
        cmd.CommandText = "CreateSQLAgentjobs";
        cmd.Parameters.AddWithValue("@job", job);
        cmd.Parameters.AddWithValue("@mycommand", command);
        cmd.Parameters.AddWithValue("@servername", serverName);
        cmd.Parameters.AddWithValue("@startdate", startDate);
        cmd.Parameters.AddWithValue("@starttime", startTime);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Connection = cnn;

        cnn.Open();
        cmd.ExecuteNonQuery();   // Error when using msdb connection string.
        cnn.Close();
    }
    catch (Exception ex)
    {
        // ignored
    }
}

Stored procedure:

ALTER PROCEDURE CreateSQLAgentjobs 
@job NVARCHAR(128),
@mycommand NVARCHAR(max), 
@servername NVARCHAR(28),
@startdate NVARCHAR(8),
@starttime NVARCHAR(8)
AS
BEGIN TRY
    BEGIN TRAN

    GRANT EXEC on CreateSQLAgentjobs to PUBLIC
    --1. Add a job
    EXEC msdb.dbo.sp_add_job
        @job_name = @job

    --2. Add a job step named process step. This step runs the stored procedure
    EXEC msdb.dbo.sp_add_jobstep
        @job_name = @job,
        @step_name = N'process step',
        @subsystem = N'TSQL',
        @command = @mycommand

    --3. Schedule the job at a specified date and time
    EXEC msdb.dbo.sp_add_jobschedule @job_name = @job,
        @name = 'MySchedule',
        @freq_type=1,
        @active_start_date = @startdate,
        @active_start_time = @starttime

    --4. Add the job to the SQL Server 
    EXEC msdb.dbo.sp_add_jobserver
        @job_name =  @job,
        @server_name = @servername
    COMMIT TRAN
END TRY
BEGIN CATCH
    SELECT ERROR_Message(), ERROR_Line();
    ROLLBACK TRAN
END CATCH

评论

for the error you are seeing for The EXECUTE permission was denied.... please open SSMS and execute the following code on a query tab:

GRANT EXEC on CreateSQLAgentjobs to PUBLIC

and remove it from the proc

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何在SQL Server Express版中创建作业(How to create jobs in SQL Server Express edition)
    问题 有人可以向我解释如何在SQL Server Express版中创建作业吗? 回答1 SQL Server Express不包括SQL Server代理,因此不可能仅创建SQL代理作业。 您可以做的是: 您可以通过创建批处理文件和SQL脚本文件并通过Windows Task Scheduler运行它们来“手动”创建作业。 例如,您可以使用两个文件来备份数据库,如下所示: backup.bat: sqlcmd -i backup.sql backup.sql: backup database TeamCity to disk = 'c:\backups\MyBackup.bak' 只需将两个文件放入同一文件夹中,然后通过Windows Task Scheduler执行批处理文件即可。 第一个文件只是Windows批处理文件,它调用sqlcmd实用程序并传递SQL脚本文件。 SQL脚本文件包含T-SQL。 在我的示例中,备份数据库只是一行,但是您可以在其中放入任何T-SQL。 例如,您可以改为执行一些UPDATE查询。 如果您要创建的作业是用于备份,索引维护或完整性检查的,则还可以使用Ola Hallengren出色的维护解决方案。 它由一堆存储过程(和用于SQL Server非Express版本的SQL Agent作业)组成,并且在FAQ中有关于如何在SQL Server
  • SQL Server 代理作业帐户问题(SQL Server agent job account issue)
    问题 我使用的是 SQL Server 2008。我对运行 SQL Server 代理作业时将使用哪个帐户感到困惑。 我的困惑是, SQL Server 代理作为 Windows 服务,我们可以从 Windows 服务管理控制台进行控制,从那里我们可以设置帐户来运行 SQL Server 代理(在我的计算机中为 LocalSystem); 我可以设置运行 SQL Server 代理作业级帐户吗? 我可以在每个步骤中设置 SQL Server 代理作业步骤将在哪个帐户上运行吗? 我有上述困惑,因为可能会使用 3 个不同的帐户系统,我关心的是每个步骤将运行的实际帐户是什么,我想避免任何权限问题(即我想确保帐户有足够的权限。)。 有什么意见或建议吗? 感谢任何人都可以澄清3个级别的帐户,这让我很困惑。 提前致谢,乔治 回答1 我通常会在您的应用程序访问数据库的同一帐户下运行 SQL Server 代理作业。 如果该帐户的权限太有限(这可能是一件好事!),我将为该应用程序及其所有 SQL 作业(如果可能)创建一个帐户,并在该帐户下运行所有​​ SQL 作业。 您可能会在不同的帐户下运行每个步骤,但我一般不会使用它(这只会让了解和理解在哪个帐户下运行的内容变得非常困难)。 仅当您必须运行需要大量额外权限的特别敏感的步骤时才使用它,而这些权限仅适用于特定的系统帐户或其他内容。 运行 SQL
  • SQL Server代理作业设置(SQL Server Agent Job Set Up)
    问题 我是SQL和.Net的新手,这个问题可能也很愚蠢,但我仍然需要帮助。 我在Server1上有一个数据库。 现在,我有了另一个服务器,可以将其称为Server2来进行我的开发。 我的数据库所在的Server1似乎是SQL Server Express安装,因此我在其中看不到SQL Server代理。 Server2具有一个SQL Server代理。 那么我可以使用Server2的SQL Server代理并安排查询以在Server1上自动运行吗? 这可能吗? 如果是这样,那么有人可以解释我该怎么做。 回答1 我已经从SQL Express成功运行了Jobs,mangement studio没有内置的支持,但是您可以手动完成所有工作。 但是,这是一个相当漫长的过程。 请遵循此博客文章中出色且非常详细的指南。 http://www.sqlteam.com/article/scheduling-jobs-in-sql-server-express 另外,有一个项目可以为SQL Express创建一个SQL代理:http://standalonesqlagent.codeplex.com/ 回答2 如果在Server2上创建一个指向Server1的链接服务器,则可以在Server2上创建使用server1.database.dbo.object语法在Server1上执行代码的作业。
  • SQL 代理作业 - “运行方式”下拉列表为空(SQL Agent Job - “Run As” drop down list is empty)
    问题 当我尝试设置 SQL 代理作业时,为什么“运行方式”下拉列表始终为空? 我正在尝试设置一些 SQL 代理作业以使用代理帐户运行。 我是 SQLAgentUserRole、SQLAgentReaderRole 和 SQLAgentOperatorRole 的成员。 当我尝试向作业添加步骤时,我选择 SQL 集成服务包并且运行方式下拉列表为空。 任何系统管理员都可以查看代理。 我不应该能够将代理用作 SQLAgentUserRole、SQLAgentReaderRole 和 SQLAgentOperatorRole 的成员吗? 我在这里缺少什么? (代理帐户对子系统处于活动状态:SQL 集成服务包,这是 SQL Server 2008 R2) 编辑 - MSDN:“这些数据库角色(SQLAgentUserRole、SQLAgentReaderRole 和 SQLAgentOperatorRole)的成员可以查看和执行他们拥有的作业,并创建作为现有代理帐户运行的作业步骤。” 这篇关于固定服务器角色的另一篇文章提到可以授予代理访问权限,但没有提到如何做到这一点:MSDN。 回答1 我找到了这个问题的答案。 不是系统管理员的用户必须有权访问明确授予其角色或用户名的代理帐户: 授予非系统管理员访问代理帐户的权限 在对象资源管理器中,展开服务器。 展开 SQL Server 代理。
  • 如何在C#中监视SQL Server代理作业信息(How to monitor SQL Server Agent Job info in C#)
    问题 我需要创建一个用于监视SQL Server 2000代理作业状态和信息的应用程序,当作业发生时与Windows应用程序事件日志上显示的相同。 现在,我已经通过连接字符串连接到数据库,但是我不知道如何从Job获取状态和信息。 我需要在文本框上显示状态和信息。 您有什么建议呢。 开发者工具 : MS SQL服务器2000 SP4 MS Visual Studio 2008(C#) 我是一个菜鸟程序员。 回答1 我已经可以做到了... 我在数据库“ msdb”中选择表格表“ Sysjobserver”以获取所需的读取状态,日期,工作时间。 使用此代码 public void GetJobsAndStatus() { string sqlJobQuery = "select j.job_id, j.name, j.enabled, jh.run_status," + " js.last_outcome_message, jh.run_date, jh.step_name, jh.run_time" + " from sysjobs j left join sysjobhistory jh on (j.job_id = jh.job_id)" + " left join sysjobservers js on (j.job_id = js.job_id)" + " where jh
  • 如何执行 SQL 表中列出的 SQL Server 代理作业(How to execute SQL Server Agent Jobs which are listed in SQL Table)
    问题 我试图将所有 SQL Server 代理作业存储在表名中,并希望根据它们的加载频率执行它们。 CREATE TABLE Maintainance ( SQLJobName varchar(100), --SQL Job Name which needs to be executed Frequency varchar(50), -- It can be Daily, Monthly, Weekly, Yearly ManualRunDate date, --If Frequency is not given need to execute on this date LastRunDate datetime, -- If job ran successful it will put the date and time IsSucceed bit, --1 for Success 0 for fail Email nvarchar(50) -- email address ) 我想使用 TSQL 执行这些作业。 此外,表中可能有多个需要运行的作业。 如果第一个工作失败,它应该给表中列出的人发送电子邮件,它将执行下一个工作。 如何在 sql 中使用游标或仅使用 While 循环来做到这一点? declare cur cursor for select Frequency from
  • 在SQL Server上按计划运行存储过程(Scheduled run of stored procedure on SQL server)
    问题 是否可以通过某种方式设置Microsoft SQL Server来定期运行存储过程? 回答1 是的,在MS SQL Server中,您可以创建计划的作业。 在SQL Management Studio中,导航到服务器,然后展开“ SQL Server代理”项,最后展开“作业”文件夹以查看,编辑和添加计划的作业。 回答2 如果正在使用MS SQL Server Express Edition,则SQL Server代理不可用。 我发现以下版本适用于所有版本: USE Master GO IF EXISTS( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyBackgroundTask]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[MyBackgroundTask] GO CREATE PROCEDURE MyBackgroundTask AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- The interval between cleanup
  • How do I create a step in my SQL Server Agent Job which will run my SSIS package?
    I'm trying to create an automated job for the SQL Server Agent to run. The job is supposed to run my SSIS package. Here's what I have so far: EXEC sp_add_job @job_name = 'My Job' ,@description = 'My First SSIS Job' ,@job_id = @jobid OUTPUT EXEC sp_add_jobstep @job_id =@jobid ,@step_name = N'Upload Data' ,@step_id = 1 ,@command=N'/FILE "D:\Installs\Upload.dtsx"' EXEC sp_add_jobstep @job_id = @jobid ,@step_name = N'Download Data' ,@step_id = 2 ,@command=N'/FILE "D:\Installs\Download.dtsx"' Unfortunately when I run this, I get an error saying Incorrect syntax near '/' I suspect it's complaining
  • 如何通过脚本从sql server agent获取失败的作业?(How to obtain failed jobs from sql server agent through script?)
    问题 我想获取 sql server 代理无法启动或通过 sql 脚本运行的失败作业... 回答1 我创建了一个视图来获取 sql server 中失败的作业 CREATE VIEW dbo.View_Failed_Jobs AS SELECT Job.instance_id ,SysJobs.job_id ,SysJobs.name as 'JOB_NAME' ,SysJobSteps.step_name as 'STEP_NAME' ,Job.run_status ,Job.sql_message_id ,Job.sql_severity ,Job.message ,Job.exec_date ,Job.run_duration ,Job.server ,SysJobSteps.output_file_name FROM (SELECT Instance.instance_id ,DBSysJobHistory.job_id ,DBSysJobHistory.step_id ,DBSysJobHistory.sql_message_id ,DBSysJobHistory.sql_severity ,DBSysJobHistory.message ,(CASE DBSysJobHistory.run_status WHEN 0 THEN 'Failed' WHEN 1 THEN
  • Create jobs in SQL Server Express edition? [duplicate]
    This question already has answers here: SQL Server Agent Job Set Up (2 answers) Closed 7 years ago. I want to schedule some jobs in sql server express edition. After digging a bit i got few post like: How to run a stored procedure every day in SQL Server Express Edition? How to create jobs in SQL Server Express edition How to run a stored procedure every day in SQL Server Express Edition? and i understand that Sql Agent is require to schedule a job in sql server but since SQL Server express does not come with SQL Agent so i have to go with some other alternative. And i got this, which suggest
  • SQL Server 代理 - SSIS 包 - 错误 0x80131904 - 超时已过期(SQL Server Agent - SSIS Package - Error 0x80131904 - Timeout expired)
    问题 最近在 SQL Server 代理计划作业中随机出现了一系列以下错误,我一直无法找到解决方案。 该错误很少发生,但对于每日计划的作业通常每周一次,但在任意数量的不同作业中并不总是相同的。 每个作业都共享一个事实,即它从运行该作业的同一服务器执行 SSIS 包。 它也总是运行几乎正好 30 秒的经过时间,我猜这是超时阈值。 如果服务器只是连接到它自己的 SSIS 目录,我不确定为什么它会超时。 还值得注意的是,它实际上从未到达执行 SSIS 包的地步,无论尝试执行哪个包,都会发生这种情况。 在我的研究过程中,我遇到很多人建议将 SQL Server 2012 更新到最新的 CU* 或 SP2 即可解决问题。 但是,将服务器升级到 SP2 还没有。 尝试过的一种解决方案(无可否认是丑陋的)是在作业步骤失败时简单地重试一次,这实际上在大约 30% 的情况下确实解决了问题。 我欢迎任何有此错误经验的人,或任何有任何建议的人。 错误信息如下: Date 16/07/2014 6:00:11 AM Log Job History ({$jobname}) Step ID 1 Server {$productionserver} Job Name {$jobname} Step Name {$stepname} Duration 00:00:31 Sql Severity 0 Sql
  • SQL Server 代理作业依赖项(SQL Server Agent job dependency)
    问题 我们有一个 4 小时的数据仓库作业,按 4 小时计划每 4 小时运行一次。 我们想要创建一个新的“每日”计划,并让一些流程用完几个小时。 但是,如果当日常作业开始运行并且 4h 作业仍在运行时,我希望它等待 4h 作业完成,然后运行(或具有指定的持续时间)。 我还没有决定哪个最好...... 这怎么可能? 谢谢! 请不要建议第 3 方选项,因为我无法控制基础设施。 回答1 请在一张表中维护所有工作详细信息,包括工作状态,即进行中、已完成。 当每日作业运行时,您必须检查第 4 项作业成功完成,然后开始您的每日作业,并在第 4 项作业完成后触发您的每日作业。 create TABLE [dbo].[tblDailyJob]( [JobId] [int] NOT NULL, [JobDesc] [varchar](500) NOT NULL, [JobStartTime] [datetime] NULL, [JobEndTime] [datetime] NULL, [JobStatus] [int] NOT NULL, CONSTRAINT [PK_tblDailyJob] PRIMARY KEY CLUSTERED ( [JobId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY
  • 为什么在 SQL Server 代理作业中运行的 SSIS 包不会将文件传输到网络文件夹?(Why wouldn't SSIS package running in SQL Server Agent job transfer files to a network folder?)
    问题 我已经遇到了两次,现在我可以在 BIDS 和 Integration Services 中运行我的 SSIS 包,但是当它通过 SQL Server 代理运行时失败。 这两个包都将文件作为最后一步传输到我们网络上的文件夹。 我收到的错误是Could not find a part of the path然后是路径和文件名。 当我在 Windows 任务计划程序中安排它们时,它们执行得很好,但我宁愿让它们通过 sql server 代理运行。 有没有人遇到过这个问题并找到了解决方法? sql server 中是否有我缺少的设置? 任何帮助,将不胜感激。 回答1 您需要使用配置为运行SQL Server Integration Services Packages类型的作业的proxy account运行 SQL Server 作业。 这些作业通常在SQL Server Agent Service account下运行,该SQL Server Agent Service account无权访问网络文件夹。 要访问网络文件夹,您需要使用域帐户凭据(最好)设置代理,以便您可以访问网络路径。 SO问题中的以下答案包含有关如何设置代理帐户的详细步骤 如何在我的 SQL Server 代理作业中创建一个步骤来运行我的 SSIS 包?
  • 在 SQL Server Express 版本中创建作业? [复制](Create jobs in SQL Server Express edition? [duplicate])
    问题 这个问题在这里已经有了答案: SQL Server 代理作业设置(2 个回答) 7年前关闭。 我想在 sql server express edition 中安排一些作业。 挖掘了一下之后,我得到了一些帖子,例如: 如何在 SQL Server Express Edition 中每天运行一个存储过程? 如何在 SQL Server Express 版中创建作业 如何在 SQL Server Express Edition 中每天运行一个存储过程? 我知道 Sql Agent 需要在 sql server 中安排工作,但由于 SQL Server express 没有附带 SQL Agent,所以我必须使用其他一些替代方法。 我得到了这个,这表明了良好而简单的替代方案。 在@Thomas Bratt 的回答中,他使用了无限循环和等待(Transact-SQL) 来自@Thomas Bratt 答案的代码 我想知道这段代码的性能影响(如果有的话)。 ... while 1 = 1 begin waitfor time @timeToRun begin execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure]; end end ... 在同一篇文章中,@Raj More 提出了另一种替代方案,即 Windows 调度程序
  • How to execute SQL Server Agent Jobs which are listed in SQL Table
    I am trying to store all the SQL Server Agent Jobs in Table name and want to execute them based on their loading frequency. CREATE TABLE Maintainance ( SQLJobName varchar(100), --SQL Job Name which needs to be executed Frequency varchar(50), -- It can be Daily, Monthly, Weekly, Yearly ManualRunDate date, --If Frequency is not given need to execute on this date LastRunDate datetime, -- If job ran successful it will put the date and time IsSucceed bit, --1 for Success 0 for fail Email nvarchar(50) -- email address ) I want to execute these jobs using TSQL. Also there could be more than one job
  • 从 SQL Server 代理(作业)运行 C# 控制台应用程序?(Run a C# Console Application from SQL Server Agent (Job)?)
    问题 这可能是一个非常简单的问题,但我已经尝试了过去 4-5 个小时但没有成功。 :( 我有一个 C# 控制台应用程序,它只是打开一个 excel 文件。 这个 excel 文件有 Workbook_Open() 事件,它运行我的宏。 我的宏只是将活动工作表中的 sheet1 重命名为 RenameSheet1 。 我可以从 IDE 运行我的 C# 项目。 我想从 SQL 作业(SQL server 2008)运行这个项目。 我该怎么做? 请帮我解决这个问题。 谢谢。 根据 SilverNinnjas 创建代理帐户的建议: -- 创建包含域帐户 CORP\PowerUser1 及其密码的凭据 CREATE CREDENTIAL PowerUser1 WITH IDENTITY = N'CORP\shress2', SECRET = N'P@ssw0rd' GO USE [msdb] GO -- 创建一个名为 ExcelProxy 的新代理并为其分配 PowerUser 凭据 EXEC msdb.dbo.sp_add_proxy @proxy_name=N'ExcelProxy', @credential_name=N'PowerUser1', @enabled=1 -- 授予 ExcelProxy 访问“CmdExec”子系统的权限 EXEC msdb.dbo.sp_grant
  • 从远程 2005 服务器上的 SQL 代理作业调用 2008 服务器上的 SSIS 包(Call SSIS Package on 2008 server from SQL Agent Job on remote 2005 server)
    问题 我正在尝试远程执行 SSIS 包,但未成功。 该包驻留在 SQL Server 2008 实例上,我想从 2005 服务器上的作业中调用它。 我得到的错误是: 无法加载包。 步骤失败。 如果我从 2008 年到 2008 年,没有错误。 有任何想法吗? 回答1 假设您尝试使用dtexec命令执行包,问题在于包是在调用服务器上执行的,而不是在存储它的服务器上。 由于 2005 SSIS 服务无法执行 2008 包,因此该步骤失败。 您需要在要运行作业的服务器上触发dtexec 。 最简单的方法可能是在启动包的 2008 服务器上设置 SQL 代理作业,并从 2005 服务器触发它(使用 sp_startjob 或更复杂的触发机制)。 回答2 您正在运行的帐户是否具有 SQL 2005 框的权限。 您可以创建一个代理来运行该作业。
  • 如何从存储过程传递参数以在 SQL Server 代理作业中设置值?(How do I pass parameter to set value in SQL Server agent job from stored procedure?)
    问题 我正在从如下所示的存储过程中调用 SQL Server 作业 CREATE PROC StartMyMonthlyInventoryJob AS EXEC msdb.dbo.sp_start_job N'_TIME_ACCESSABILITY_HOURS' GO 并且我想更改此作业的设置值(我知道如何以图形方式进行配置)。 当我从存储过程调用该作业时,如何传递参数以设置值? 谢谢 回答1 你没有。 相反,您创建一个表,其中包含作业将传递给 SSIS 包的所有参数。 向包中添加新的第一步以从表中读取参数并填充包变量。 向包中添加一个新的最后一步以更新参数表并删除该行,或使用某种“已完成”标志更新它。
  • 一小时后更新插入表中的记录(Update record inserted in table after one hour)
    问题 我有一个事务表,其中插入了记录。 表结构如下。 CreateDate|TransactionNo|Status 现在,我想在创建一小时后更改每个交易记录的状态。 对于前。 如果在上午 10 点插入状态为未付款的记录,那么我想触发一个事件或触发器,在上午 11 点准时将记录状态更改为已付款。 我怎样才能做到这一点 ?? 回答1 我认为使用 Sql Server Agent 进行计划操作是您所需要的。 检查这里: 如何每小时在sql server中运行一个存储过程? 回答2 不要改变状态! 相反,添加一个具有您真正想要的状态的计算列: alter table add real_status as (case when CreateDate >= dateadd(hour, 1, getdate()) then 'Paid' else status end); (实际上,我会将表中的列命名为_status并称其为status 。然后您必须小心使用update s 和insert s。) 您也可以使用视图执行此操作。 为什么要使用这种方法? 重复交易是昂贵的。 该值恰好在您希望更改的时候更改。 等待作业被调度或由于表、页、行、索引等上的锁而没有延迟。 如果数据库出现故障,当数据库恢复时它仍然可以工作。 回答3 另一种可能的解决方案是创建状态更新的队列表。 您可以将事务标识¬
  • Executing SQL Server Agent Job from a stored procedure and returning job result
    Need to have a stored procedure that calls a SQL Server Agent Job and returns whether or not the job ran successfully or not. So far I have CREATE PROCEDURE MonthlyData AS EXEC msdb.dbo.sp_start_job N'MonthlyData' WAITFOR DELAY '000:04:00' EXEC msdb.dbo.sp_help_jobhistory @job_name = 'MonthlyData' GO Which starts the job, whats the best way to get back if the job ran successfully or not? Ok made an edit and used WAITFOR DELAY as the job normally runs between 3-4 mins never longer than 4. Does the job but is there a more efficient way to do it?