我正在排队工作,在每项工作结束时,我想要启动一个SP,它将对数据进行大量处理.所以我不想等待SP完成,我只想在触发SP后立即转到下一个工作.存储过程将从触发代码中获取输入.
问题:-
这是我创建工作的脚本.请注意,我没有添加任何计划.
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'job_JobName',@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'UserName',@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'StepName',@step_id=1,@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'exec dbo.SpToExecute',@database_name=N'DataBaseName',@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:
现在,当我通过执行EXEC msdb.dbo.job_JobName’开始这项工作时,它没有执行dbo.SpToExecute.我需要在作业中只运行一次dbo.SpToExecute,然后作业应该停止.再次当我执行EXEC msdb.dbo.job_JobName’时,它应该再次运行exec dbo.SpToExecute一次.你能告诉我如何实现这个或我在这里缺少的东西吗?
解决方法
您可以使用
BeginExecuteNonQuery或其他异步方法,或者您可以创建将运行SP的sql作业,然后只需调用常规同步ExecuteNonQuery来启动作业.它将立即返回,因为开始工作很快.然后工作运行,你可以“忘记”它.
string sql =“EXEC dbo.sp_start_job’你的工作名称’”;
然后在数据库上执行该操作.它应该立即返回.如果成功则返回0,如果不成功则返回1.见here.
您无法将参数传递给作业.因此,如果需要,您可以创建一个包含您想要传递的参数的表.然后,在调用sp_start_job SP之前,需要使用希望SP使用的参数更新表.然后,您还需要SP查看该表并查看要使用的参数.这很容易.
就是这样.火与忘记.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。