解决SSIS提取最大时间并增量提取数据解决方法
我们在SSIS中设计ETL操作的时候,对于业务数据的定量或者全量加载都会遇到同样的一个问题,那就是增量,到底是如何去做,我想每个人的做法也有所不同有人使用时间戳、也有使用日志,但是对于不能干预业务系统的SSIS人员来说,有可能业务系统没有设计这样的字段供我们使用,我们就只能根据业务系统里面能使用的字段来做文章了,接下来我要分享我针对业务系统是如何做的。
在此我也提出一个疑问就是,数据流任务中的OLE DB源控件中使用 SQL命令并使用?代替参数,如果?为DateTime类型将对数据表的索引无效,也就是说这样来做SQL语句并不能使用到SQL索引,有遇到过的朋友可以来一起交流。
一、处理流程

二、具体步骤
1. 创建变量

2. 获取最大时间
在控制流中加入一个“执行SQL任务”并设置 SQLStatement属性内容为:
Select
?=CONVERT(varchar(30),ISNULL(MAX(CreateTime),'1900-01-01'),21)
From YourTableName
接下来点击“参数映射”配置如下:

这样就能获取到要增量的数据表的最大时间了。
3. 生成SQL语句
这个步骤如果在本文前部分提到的问题能解决的话就能忽略本步骤。
在控制流中加入一个“脚本任务”并设置LoadSQL为可读写参数,LastCreateTime参数为可读参数。
接下来点击“脚本编辑”编写我们的脚本:
public void Main()
{
string strCreateSql = "Select * From YourTable Where CreateTime > '" + Dts.Variables["LastCreateDate"].Value.ToString() + "'";
Dts.Variables["LoadSQL"].Value = strCreateSql;
Dts.TaskResult = (int)ScriptResults.Success;
}
这样就可以了。
4. 数据加载
这里就是简单的设置,拖入一个“数据流任务”,并加入OLE DB源 双击这个源:

这样就可以解决增量和索引问题了。
本文章结束。。。。。。。
如果您有更好的解决办法,希望能和大伙一起分享。

浙公网安备 33010602011771号