方法其实不止一种,我介绍一种使用DataReader数据源的方法。
最基本的前提是,在执行SSIS的服务器上需要有安装相应数据源的Provider,比如你需要从Oracle8.1的数据库中导入数据,那么在SSIS服务器上就要安装Oracle8.1的驱动,或者安装一个Oracle8.1的客户端。
第一步:定义变量,建议定义为DateTime类型,作用域为整个包。
(不知为何不让我上传图片,干说吧)
第二步:变量赋值,使用“执行SQL任务”控件,通过SQL语句取得目的表中的最大日期,并在“结果集”标签页中,将结果赋值给变量。
第三步:在控制流中加入“数据流任务”,在任务流中加入“DataReader数据源”,然后在数据流任务的属性中找到“Expression”选项,在其后的“属性表达式编辑器”中找到DataReader数据源的SQLCommand属性,并在表达式框中输入带变量的SQL表达式,例如:
"select * from Table
where date >= to_date('"+ (DT_WSTR,20) (DT_DBDATE) @[用户::Dt_Max_fact]+"','yyyy-mm-dd')"
上述语句需要符合数据源的语法要求,如果数据源是Oracle,那么这段SQL就要符合Oracle的语法要求,其他数据源也类似。可以点击“计算结果值”来查看是否正确。
另外需要注意的是,在DataReader数据源控件中的“连接管理器”选项中,需要选择“ADO.Net”类型的数据源,并且在DataReader数据源控件的SQLCommand选项中直接写入"select * from Table",这样就可以在设计阶段与数据目标做字段对应,而在执行包的时候则会调用Expression选项中的SQLCommand中的内容。
这样就可以将变量应用到读取数据源的SQL中啦