r\( <AD(30), SERVERPROPERTY('ServerName')))) BEGIN RAISERROR(14266, -1, -1, '@start_step_id', '1') RETURN(1) -- Failure END END ELSE BEGIN -- Existing job DECLARE @max_step_id INT DECLARE @valid_range VARCHAR(50) -- Get current maximum step id SELECT @max_step_id = ISNULL(MAX(step_id), 0) FROM msdb.dbo.sysjobsteps WHERE (job_id = @job_id) IF (@start_step_id < 1) OR (@start_step_id > @max_step_id + 1) BEGIN SELECT @valid_range = '1..' + CONVERT(VARCHAR, @max_step_id + 1) RAISERROR(14266, -1, -1, '@start_step_id', @valid_range) RETURN(1) -- Failure END END -- Check category SELECT @job_type = NULL IF (EXISTS (SELECT * FROM msdb.dbo.sysjobservers WHERE (job_id = @job_id) AND (server_id = 0))) SELECT @job_type = 1 -- LOCAL IF )EXISTS (SELECT * FROM msdb.dbo.sysjobservers WHERE (job_id = @job_id) AND (server_id <> 0))) SELECT @job_type = 2 -- MULTI-SERVER -- A local job cannot be added to a multi-server job_category IF (@job_type = 1) AND (EXISTS (SELECT * FROM msdb.dbo.syscategories WHERE (category_class = 1) -- Job AND (category_type = 2) -- Multi-Server ! AND (name = @category_name))) BEGIN RAISERROR(14285, -1, -1) RETURN(1) -- Failure END -- A multi-server job cannot be added to a local job_category IF (@job_type = 2) AND (EXISTS (SELECT * FROM msdb.dbo.syscategories WHERE (category_class = 1) -- Job AND (category_type = 1) -- Local AND (name = @category_name))) !BEGIN RAISERROR(14286, -1, -1) RETURN(1) -- Failure END -- Get the category_id, handling any special-cases as appropriate SELECT @category_id = NULL IF (@category_name = N'[DEFAULT]') -- User wants to revert to the default job category BEGIN SELECT @category_id = CASE ISNULL(@job_type, 1) WHEN 1 THEN 0 -- [Uncategorized (Local)] WHEN 2 THEN 2 -- [Uncategorized (Multi-Server)] END END EMSE IF (@category_name IS NULL) -- The sp_add_job default BEGIN SELECT @category_id = 0 END ELSE BEGIN SELECT @category_id = category_id FROM msdb.dbo.syscategories WHERE (category_class = 1) -- Job AND (name = @category_name) END IF (@category_id IS NULL) BEGIN RAISERROR(14234, -1, -1, '@category_name', 'sp_help_category') RETURN(1) -- Failure END -- Only SQLServerAgent may add jobs to the 'Jobs From MSX' category IF (@category_id = 1) AND (PROGRAM_NAME() NOT LIKE N'SQLAgent%') BEGIN RAISERROR(14267, -1, -1, @category_name) RETURN(1) -- Failure END -- Check owner -- If a non-sa is [illegally] trying to create a job for another user then default the owner -- to be the calling user. IF ((ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) = 0) AND (@owner_sid <> SUSER_SID())) SELECT @owner_sid = SUSER_SID() -- Now just check that the login id is valid (ie. it exists and isn't an NT group) IF (@owner_qid IS NULL) OR (EXISTS (SELECT * FROM master.dbo.syslogins WHERE (sid = @owner_sid) AND (isntgroup <> 0))) BEGIN -- NOTE: In the following message we quote @owner_login_name instead of @owner_sid -- since this is the parameter the user passed to the calling SP (ie. either -- sp_add_job or sp_update_job) SELECT @res_valid_range = FORMATMESSAGE(14203) QAISERROR(14234, -1, -<AD1, '@owner_login_name', @res_valid_range) RETURN(1) -- Failure END -- Check notification levels (must be 0, 1, 2 or 3) IF (@notify_level_eventlog & 0x3 <> @notify_level_eventlog) BEGIN RAISERROR(14266, -1, -1, '@notify_level_eventlog', '0, 1, 2, 3') RETURN(1) -- Failure END IF (@notify_level_email & 0x3 <> @notify_level_email) BEGIN RAISERROR(14266, -1, -1, '@notify_level_email', '0, 1, 2, 3') RETURN(1) -- Failure END IF (@notify_level_netsend & 0x3 <> @notify_level_netsend) BEGIN RAISERROR(14266, -1, -1, '@notify_level_netsend', '0, 1, 2, 3') RETURN(1) -- Failure END IF (@notify_level_page & 0x3 <> @notify_level_page) BEGIN RAISERROR(14266, -1, -1, '@notify_level_page', '0, 1, 2, 3') RETURN(1) -- Failure END -- If we're at a TSX, only SQLServerAgent may add jobs that notify 'MSXOperator' IF (NOT EXISTS (SELECT * FROM msdb.dbo.systargetservers)) AND ((@notify_email_operator_name = N'MSXOperator') OR (@notify_page_operator_name = N'MSXOperator') OR (@notify_netsend_operator_name = N'MSXOperator')) AND (PROGRAM_NAME() NOT LIKE N'SQLAgent%') BEGIN RAISERROR(14251, -1, -1, 'MSXOperator') RETURN(1) -- Failu