动态 SQL 代理参数

问题描述 投票:0回答:1

我已向 SSIS 包添加了两个参数。 BeginDate 和 EndDate 被硬编码为 3/1/2024 和 3/31/2024。在相应的SQL Agent Job中,我可以看到包参数。我想通过 SQL 代理作业传递动态上个月开始和上个月结束参数,而不是硬编码日期,以便可以按每月计划运行,无需任何干预。如果需要,我可以暂时将日期更改为两个月的范围。我希望它默认为上个月开始和上个月结束 SQL 代理作业参数。

stored procedure variables

SSIS Package Parameters

SQL Agent Job Parameters

提前致谢。

sql-server parameters ssis
1个回答
0
投票

如您所示运行 SSIS 包的 sql 代理作业不能像您想要的那样具有动态参数。

相反,您需要将作业类型从 Integration Services 更改为 TSQL,然后将参数动态化,然后运行 ssis 包。

脚本的内容将如下所示

DECLARE @execution_id bigint;
EXEC SSISDB.catalog.create_execution
    @package_name = N'CheckMyBits.dtsx'
,   @execution_id = @execution_id OUTPUT
,   @folder_name = N'demo'
,   @project_name = N'SO_Trash'
,   @use32bitruntime = False
,   @reference_id = NULL
,   @runinscaleout = False;
SELECT
    @execution_id;

DECLARE @var0 sql_variant = DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1);
EXEC SSISDB.catalog.set_execution_parameter_value
    @execution_id
,   @object_type = 20
,   @parameter_name = N'start_date'
,   @parameter_value = @var0;

DECLARE @var1 sql_variant = CAST(EOMONTH(GETDATE()) AS date);
EXEC SSISDB.catalog.set_execution_parameter_value
    @execution_id
,   @object_type = 20
,   @parameter_name = N'end_date'
,   @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;

您可以看到 @var0 和 @var1 正在获取当前月份的开始/结束日期,并将它们分配给我的包的参数

start_date
end_date

© www.soinside.com 2019 - 2024. All rights reserved.