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

标签 ssis sql-server-2012 ssis-2012

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

当我通过更改集成服务目录/环境下的参数值来手动测试软件包时,我得到了期望的范围。该软件包将通过sql agent job运行。我可以创建并执行一个sis-sis步骤来完成ssis之外的这个简单任务吗?

最佳答案

尽管这些值可以存储在internal.object_parameters中,但要避免直接在这些表中编辑这些值的诱惑。而是使用提供的方法进行操作。在这种情况下,存储过程为catalog.set_environment_variable_value。

下面是如何以编程方式更改环境变量的值的示例。我认为这是SQL Agent作业中的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

关于ssis - SSIS 2012:如何更改项目的环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17098239/

相关文章:

ssis - 有没有办法对 SSIS 平面文件源中的字段重新排序?

sql - 从 SQL 脚本在 nvarchar 或 varchar 中插入控制字符?

azure - Azure VM 上的 SSIS 和 SQL Server

sql-server - sp_who2 BlkBy 休眠进程等待命令

sql-server - SSIS发送邮件文件附件失败

sql - 预热数据库(将整个数据库放入缓存)

sql - 如何从sql server 2012中的表中删除自动增量

sql-server - 包验证错误 : 0xC020801C excel connection

deployment - ISDeploymentWizard.exe 的安装程序

sql-server - 是否有工具可以检查 varchar 数据并建议合适的数据类型?