条件EXEC dbo语句。强制错误(如果存在),否则成功

时间:2019-01-03 04:36:22

标签: sql sql-server tsql

我正在尝试编写一个脚本,当当前正在运行SQL代理作业时,该脚本将作为错误退出。如果没有正在运行的作业,我也希望它成功(退出0)。

类似下面的内容。

IF
EXEC msdb.dbo.sp_help_job @execution_status=1
THEN
RAISE ERROR
ELSE
COMPILE SUCCESS

1 个答案:

答案 0 :(得分:0)

以下代码将为您提供帮助。您可能需要更改代码以执行所需的操作。 首先,您需要创建一个存储过程:

CREATE PROCEDURE YourProc
    AS
BEGIN
DECLARE @ErrMsg NVARCHAR(MAX), @ErrSeverity INT
SET XACT_ABORT OFF
BEGIN TRY
    IF EXISTS (
        SELECT *
        FROM msdb.dbo.sysjobs_view job  
        INNER JOIN msdb.dbo.sysjobactivity activity 
            ON job.job_id = activity.job_id 
        WHERE activity.run_Requested_date IS NOT NULL  
          AND activity.stop_execution_date IS NULL) 
    BEGIN
        SELECT  @ErrMsg = 'There is a Job already running',
                @ErrSeverity = 1;
        RAISERROR (@ErrMsg, @ErrSeverity, 1);
    END
    ELSE
        PRINT 'No Jobs running'
END TRY

BEGIN CATCH
    SELECT  @ErrMsg = ERROR_MESSAGE(),
            @ErrSeverity = ERROR_SEVERITY();
    RAISERROR (@ErrMsg, @ErrSeverity, 1);
END CATCH
END

然后,您可以调用过程:

EXEC YourProc