日期:2014-05-18  浏览次数:20407 次

关于SSIS增量抽取问题
各位大侠,小弟最近做BI项目,现在在编写SSIS增量抽取数据库数据,做法是
在业务系统中有个时间戳字段,我们打算在每次抽取后将本次的抽取最大的时间戳存放在我们的抽取日志表中。
现在的问题是抽取日志表中存放时间戳的字段应该是什么类型的?另外SSIS里面有个变量专门存放最大抽取的那个时间戳a,单这个a变量应该是什么类型呢?

------解决方案--------------------
应该是保持和业务系统一样的类型
------解决方案--------------------
SQL code
不懂,帮顶,学习,蹭分.

------解决方案--------------------
 
应该也是timestamp
------解决方案--------------------
看情况,貌似不用插入,只需作为增量标记
------解决方案--------------------
错了,用datetime 类型

用convert 或者cast 转换一下
------解决方案--------------------
SQL code
--> 测试数据: #tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb (id varchar(1),a timestamp)
insert into #tb (id)
select '1'  union all
select 'a' 

/*
select  *,dt=cast(a as datetime) from #tb 

id   a                    dt
---- ------------------  ----------------------------
1    0x00000000000007F3  1900-01-01 00:00:06.783
a    0x00000000000007F4  1900-01-01 00:00:06.787

(2 行受影响)
*/
create table ##(id varchar(1),b datetime)
insert ## select top 1 * from #tb order by a desc


select * from ##

/*
id   b
---- -----------------------
a    1900-01-01 00:00:06.787

(1 行受影响)
*/

------解决方案--------------------
由于时间戳Timestamp是二进制类型,所以你的记录表中可以定义为binary(8)或varbinary(8)类型。
在SSIS中,变量可以定义为Byte类型。参数传递的时候还有一个类型叫DBTimestamp。
------解决方案--------------------
学习学习!......
------解决方案--------------------
兄弟,你可以给它convert想什么类型,不都OK
------解决方案--------------------
在源系统中增加一个时间戳字段,只是为了方便提取,什么类型无所谓,如datetime或date类型都可以。

------解决方案--------------------
探讨
兄弟,你可以给它convert想什么类型,不都OK

------解决方案--------------------
trigger 到一个关键字表,外加标记位
------解决方案--------------------
datetime