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为变量赋值

 

 

作者悦光阴
本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。
分类: SSIS 组件





本文转自悦光阴博客园博客,原文链接:http://www.cnblogs.com/ljhdo/p/4498149.html,如需转载请自行联系原作者
目录
相关文章
flowable项目报错:java.sql.SQLSyntaxErrorException: Table ‘psr_flowable_test.act_ge_property’ doesn’t exi
flowable项目报错:java.sql.SQLSyntaxErrorException: Table ‘psr_flowable_test.act_ge_property’ doesn’t exi
189 0
|
8月前
Mac系统R语言升级后无法加载包报错 package or namespace load failed in dyn.load
Mac系统R语言升级后无法加载包报错 package or namespace load failed in dyn.load
如何解决 conda install 库时报错:The environment is inconsistent, please check the package plan carefully
如何解决 conda install 库时报错:The environment is inconsistent, please check the package plan carefully
如何解决 conda install 库时报错:The environment is inconsistent, please check the package plan carefully
|
资源调度
No change to package.json was detected. No package manager install will be executed.怎么解决
这个提示是由于没有对 package.json 文件进行更改所导致的,因此无需运行包管理器的安装。
440 0
|
Java Maven
使用maven构建项目报错Cannot change version of project facet Dynamic Web Module to 3.0解决方案
使用maven构建项目报错Cannot change version of project facet Dynamic Web Module to 3.0解决方案
使用maven构建项目报错Cannot change version of project facet Dynamic Web Module to 3.0解决方案
|
算法 Python
包引入报错 ImportError: cannot import name ‘best_partition‘ from ‘community‘
包引入报错 ImportError: cannot import name ‘best_partition‘ from ‘community‘
包引入报错 ImportError: cannot import name ‘best_partition‘ from ‘community‘
|
数据库
EF-CodeFirst数据库迁移时可能出现的几种错误- The EntityFramework package is not installed on project 'MovieEF'
EF-CodeFirst数据库迁移时可能出现的几种错误- The EntityFramework package is not installed on project 'MovieEF'
EF-CodeFirst数据库迁移时可能出现的几种错误- The EntityFramework package is not installed on project 'MovieEF'
|
Ruby
【Ruby on Rails问题】publish_name.rb文件中定义的变量显示没有定义NameError: uninitialized constant DB_CLASS
在rails项目中,config/initializers/publish_name.rb文件常用来定义的全局变量、全局常量。但是我们虽然在publish_name.rb文件中定义了常量,但是还是显示没有定义。来看一下解决方法。 问题描述: 在publish_name.rb文件中定义了变量DB_CLASS
141 0
|
存储 Oracle 关系型数据库