2

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

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

4

1 回答 1

11

虽然值可能存储在 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
于 2013-06-14T02:19:29.363 回答