• SSIS package 更新 variable


    在Package中声明一个variable,在package运行的过程中,SSIS如何update Variable?

    第一种方法:使用 Script Task 来更新Variable的值

    1,创建一个variable ,VariableName是VarCode,并将变量传递到脚本的ReadWriteVariables数组中。

    2,在C#脚本中,SSIS提供两种方式访问变量,第一种方式比较简单,推荐使用。

    复制代码
                //读写变量 第一种方式
                string VarName = this.Dts.Variables["User::VarName"].Value.ToString();
                int VarCode = int.Parse(this.Dts.Variables["User::VarCode"].Value.ToString());
    
                this.Dts.Variables["User::VarCode"].Value = 2;
    
    
                //读写变量 第二种方式 
                this.Dts.VariableDispenser.LockForRead("User::VarName");
                this.Dts.VariableDispenser.LockForWrite("User::VarCode");
    
                Variables vars=null;
                this.Dts.VariableDispenser.GetVariables(ref vars);
    
                string strName = vars["User::VarName"].Value.ToString();
    
                int iCode = int.Parse(vars["User::VarCode"].Value.ToString());
    
                vars["User::VarCode"].Value = 3;
                
                vars.Unlock();
    复制代码

    第二种方法:使用 Script  Component 来更新Variable的值

     1,创建变量

    2,将变量传递到Script component中

    3,使用C#脚本引用变量,在script component中引用变量有两种方式

    3.1 使用变量名作为来引用变量

            int code = this.Variables.VarCode;
            //string name = this.Variables.VarName;
            //this.Variables.VarName = "New VarName";

    在引用ReadWrite类型的变量时,可能会发生异常“在PostExecute之外不能锁定变量集合进行读写访问”,就是说,不能在PostExecute函数之外通过这种方式引用ReadWrite类型的变量,如果发生这种异常,只需要将引用ReadWrite类型的变量的代码放到PostExecute中就不会出错了。

    3.2使用加锁方式来引用变量,这种方式能在PostExecute函数之外引用ReadWrite类型的变量

    复制代码
    复制代码
            this.VariableDispenser.LockForRead("User::VarCode");
            this.VariableDispenser.LockForWrite("User::VarName");
    
            IDTSVariables100 vars = null;
            this.VariableDispenser.GetVariables(out vars);
    
            int iCode = int.Parse(vars["User::VarCode"].Value.ToString());
            string strName = vars["User::VarName"].Value.ToString();
            vars["User::VarName"].Value = "New VarName";
    
            vars.Unlock();
    复制代码
    复制代码

    第三种方法:通过Execute Sql Task 为变量赋值,通过Sql语句返回单行结果集,将结果集更新到接收数据的变量上。

    Result Set属性:选择 Single Row

    Sql Statement: 输入要赋值的sql语句  select 'ExecSqlCmd task' as Name, 2 as Code

    Result Set选项卡:设置输出的单行结果和变量之间的映射关系

    第四种方法:通过Execute Sql Task 为变量赋值,使用Sql赋值语句,将结果集更新到接收数据的变量上。

    sql赋值语句主要有两种,select和set

    declare @id int
    
    select @id=1
    set @id=1

    创建Package变量

    配置Execute Sql Task的属性

    Result Set属性:选择 None

    Sql Statement: 输入sql赋值语句  select ?='ExecSqlCmd task'

    在Parameter mapping中配置Direction为Output

    第五种方法:使用Expression Task为变量赋值

    在Expression中输入赋值的Expression。

    第六种方法:为变量设置初始值,在创建变量的Variables窗体中,在Value输入的值就是变量的初始值,也可以在Expression中,使用Expression为变量赋值

  • 相关阅读:
    HihoCoder1371
    Intern Day23
    腾讯移动客户端开发暑期实习一面笔试
    C++
    朱丹为什么是文艺青年
    金数据一个不错的调查平台
    单反手动对焦M档,AV,TV,P,A,A-DEP
    chrome不支持字体12px
    火狐解决字体模糊
    《程序员的自我修养》阅读笔记(四):
  • 原文地址:https://www.cnblogs.com/zhengxingpeng/p/6688025.html
Copyright © 2020-2023  润新知