如何在特定时间内安排一次性执行存储过程?基本上,我的要求是处理(Process,TimeToRunIt)的传入请求。
我想避免使用10秒的SQL Server代理作业来继续检查是否该执行。根据我的理解,Service Broker旨在让排队执行尽快运行。
我可以想象的一种解决方法是使用高度并行的Service Broker队列(高最大线程限制)来计划执行请求并使用
WAITFOR
,但必须有更好的(非黑客)方式,对吗?
感谢。
答案 0 :(得分:1)
您可以为SSIS作业设置一次性计划。
添加SSIS包时,请转到计划表>新建>计划类型>一次性。然后选择日期& “一次性出现”下的时间值。
就是这样!
听起来你正试图“按需”安排工作,这实际上不止一次。只是没有像SQL代理作业那样的时间表。在这种情况下,SSISDB很可能是您想要使用的。您可以使用SSISDB中包含的系统存储过程触发作业。例如:
Declare @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Child1.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'TestDeply4', @project_name=N'Integration Services Project1', @use32bitruntime=False, @reference_id=Null
Select @execution_id
DECLARE @var0 sql_variant = N'Child1.dtsx'
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=20, @parameter_name=N'Parameter1', @parameter_value=@var0
DECLARE @var1 sql_variant = N'Child2.dtsx'
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=20, @parameter_name=N'Parameter2', @parameter_value=@var1
DECLARE @var2 smallint = 1
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var2
EXEC [SSISDB].[catalog].[start_execution] @execution_id
GO