pld*_*llo 2 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之外的这个简单任务?
虽然值可以存储在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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7984 次 |
| 最近记录: |