Metaphor Asked: 2017-04-06 05:03:46 +0800 CST2017-04-06 05:03:46 +0800 CST 2017-04-06 05:03:46 +0800 CST 在 SQLCMD 脚本中抑制非 ANSI 警告 772 我正在使用在 SQL Server 2014 中创建 SQL 代理作业的脚本。该作业的最后 2 个步骤是“成功完成”和“失败完成”。该脚本总是警告不存在的步骤。 警告:@on_fail_step_id 引用的步骤不存在。警告:@on_success_step_id 引用的步骤不存在。警告:@on_fail_step_id 引用的步骤不存在。 关闭 ANSI_WARNINGS 对这些没有影响,我想,不是 ANSI 警告。 有没有办法抑制这些? sql-server t-sql 1 个回答 Voted Best Answer SqlWorldWide 2017-04-06T07:21:23+08:002017-04-06T07:21:23+08:00 我能够重现这个问题。问题是第 1 步引用的是尚未创建的步骤。以下代码将生成您遇到的相同错误。 USE [msdb] GO BEGIN TRANSACTION DECLARE @ReturnCode INT SELECT @ReturnCode = 0 IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1) BEGIN EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback END DECLARE @jobId BINARY(16) EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'test333', @enabled=1, @notify_level_eventlog=0, @notify_level_email=0, @notify_level_netsend=0, @notify_level_page=0, @delete_level=0, @description=N'No description available.', @category_name=N'[Uncategorized (Local)]', @owner_login_name=N'domain\account', @job_id = @jobId OUTPUT IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'GetDate', @step_id=1, @cmdexec_success_code=0, @on_success_action=4, @on_success_step_id=2, @on_fail_action=4, @on_fail_step_id=3, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N'TSQL', @command=N'select getdate()', @database_name=N'master', @flags=0 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'success', @step_id=2, @cmdexec_success_code=0, @on_success_action=1, @on_success_step_id=0, @on_fail_action=2, @on_fail_step_id=0, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N'TSQL', @command=N'Print ''i am success''', @database_name=N'master', @flags=0 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'failure', @step_id=3, @cmdexec_success_code=0, @on_success_action=2, @on_success_step_id=0, @on_fail_action=2, @on_fail_step_id=0, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N'TSQL', @command=N'print ''i am failure''', @database_name=N'master', @flags=0 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback COMMIT TRANSACTION GOTO EndSave QuitWithRollback: IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION EndSave: GO 我在第一步注释掉了 4 行。添加了一个调用 sp_update_jobstep 的部分。此代码不会抛出您遇到的错误。我只是在这里粘贴修改后的代码。 EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'GetDate', @step_id=1, @cmdexec_success_code=0, --@on_success_action=4, --@on_success_step_id=2, --@on_fail_action=4, --@on_fail_step_id=3, ........ IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 在创建最后一步结束时和运行 sp_add_jobserver 之前添加它。 EXEC msdb.dbo.sp_update_jobstep @job_id=@jobid, @step_id=1 , @on_success_action=4, @on_success_step_id=2, @on_fail_action=4, @on_fail_step_id=3
我能够重现这个问题。问题是第 1 步引用的是尚未创建的步骤。以下代码将生成您遇到的相同错误。
我在第一步注释掉了 4 行。添加了一个调用 sp_update_jobstep 的部分。此代码不会抛出您遇到的错误。我只是在这里粘贴修改后的代码。
在创建最后一步结束时和运行 sp_add_jobserver 之前添加它。