我想更改2个日期项目变量,StartDateTime和EndDateTime。我有另一个名为RunType的变量。很简单,我想先读取RunType值。如果设置为“Incremental”,我想将StartDate从昨天的12:00:00更改为StartDate,并将EndDate更改为昨天的晚上11:59:59。我尝试回写值时得到的错误似乎表明写入是在项目级别变量上。这是真的 - 或者在处理这些项目级别变量时,我需要做些什么?我想到了创建包级变量,一个控制表,等等......这似乎有点过分了。
当我通过更改集成服务目录/环境下的参数值手动测试包时,我得到了我期望的范围。该包将通过sql代理作业运行。是否有一个pre-ssis步骤我可以创建并执行以执行ssis之外的这个简单任务?
答案 0 :(得分:6)
虽然这些值可能存储在internal.object_parameters中,但是要抵制直接编辑这些表中的值的诱惑。而是使用提供的方法进行操作。在这种情况下,存储过程catalog.set_environment_variable_value。
以下是如何以编程方式更改环境变量值的示例。我会将此视为在SQL代理作业中的TSQL作业步骤,该作业在程序包启动之前运行,以确保StartDateTime和EndDateTime的正确值按预期设置。
DECLARE @var sql_variant;
DECLARE
@StartDateTime date
, @EndDateTime datetime
, @RunType bit = 1;
SELECT
@StartDateTime = CAST(dateadd(d, -1, CURRENT_TIMESTAMP) AS date)
, @EndDateTime = DATEADD(s, -1, cast(cast(current_timestamp AS date) AS datetime))
SELECT @StartDateTime, @EndDateTime;
IF (@RunType = 1)
BEGIN
SET @var = @StartDateTime;
EXECUTE [SSISDB].[catalog].[set_environment_variable_value]
@variable_name=N'StartDateTime'
, @environment_name=N'MyEnvironmentName'
, @folder_name=N'MyFolder'
, @value=@var;
SET @var = @EndDateTime;
EXECUTE [SSISDB].[catalog].[set_environment_variable_value]
@variable_name=N'EndDateTime'
, @environment_name=N'MyEnvironmentName'
, @folder_name=N'MyFolder'
, @value=@var;
END
ELSE
BEGIN
PRINT 'Logic goes here to handle the other conditions for RunType'
END