解决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源  双击这个源:

 

 

 

这样就可以解决增量和索引问题了。

 

 

本文章结束。。。。。。。

 

如果您有更好的解决办法,希望能和大伙一起分享。

posted @ 2013-01-08 09:43  Picasso  阅读(509)  评论(0)    收藏  举报