SSIS 2012:如何更改项目的环境变量?

时间:2013-06-13 22:26:51

标签: ssis sql-server-2012 ssis-2012

我想更改2个日期项目变量,StartDateTime和EndDateTime。我有另一个名为RunType的变量。很简单,我想先读取RunType值。如果设置为“Incremental”,我想将StartDate从昨天的12:00:00更改为StartDate,并将EndDate更改为昨天的晚上11:59:59。我尝试回写值时得到的错误似乎表明写入是在项目级别变量上。这是真的 - 或者在处理这些项目级别变量时,我需要做些什么?我想到了创建包级变量,一个控制表,等等......这似乎有点过分了。

当我通过更改集成服务目录/环境下的参数值手动测试包时,我得到了我期望的范围。该包将通过sql代理作业运行。是否有一个pre-ssis步骤我可以创建并执行以执行ssis之外的这个简单任务?

1 个答案:

答案 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