安排在SQL Server中一次性执行存储过程

时间:2018-02-19 21:42:21

标签: sql-server

如何在特定时间内安排一次性执行存储过程?基本上,我的要求是处理(Process,TimeToRunIt)的传入请求。

我想避免使用10秒的SQL Server代理作业来继续检查是否该执行。根据我的理解,Service Broker旨在让排队执行尽快运行。

我可以想象的一种解决方法是使用高度并行的Service Broker队列(高最大线程限制)来计划执行请求并使用 WAITFOR,但必须有更好的(非黑客)方式,对吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以为SSIS作业设置一次性计划。

添加SSIS包时,请转到计划表>新建>计划类型>一次性。然后选择日期& “一次性出现”下的时间值。

就是这样!

听起来你正试图“按需”安排工作,这实际上不止一次。只是没有像SQL代理作业那样的时间表。在这种情况下,SSISDB很可能是您想要使用的。您可以使用SSISDB中包含的系统存储过程触发作业。例如:

https://docs.microsoft.com/en-us/sql/integration-services/system-stored-procedures/catalog-start-execution-ssisdb-database

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