第1步:从现有旧系统中获取所有类型的数据,并将其转储到我的数据库中的一系列临时表中。
第2步:将我的临时表中的数据移动到我专门用于项目的更多关系表中。
在第1步中,我只是批量SELECT
和批量INSERT
;但是,在第2步中,我使用OLEDB Command任务逐行插入到表中,这样我就可以记录发生的所有事情的非常具体的行级活动。这是我对第2步流程的总体布局。
alt text http://dl.dropbox.com/u/2468578/screenshots/step_1.png
您会注意到3个OLEDB任务:1表示实际INSERT
,2表示成功/失败INSERT
进入我们的记录表。
我正在记录的主要内容是通过此流的每一行的源表/ id和目标表/ id。我将这些东西存储在变量中,并使用派生列将它们添加到数据流中,以便我可以轻松地将它们映射到存储过程的查询参数。
alt text http://dl.dropbox.com/u/2468578/screenshots/step_3.png
我决定将这些日志记录值存储在变量中,而不是对任务中SqlCommand字段中的值进行硬编码,因为我很确定你不能在该字段中放置变量表达式(即{{1 }})。所以,这是我找到的最佳解决方案。
alt text http://dl.dropbox.com/u/2468578/screenshots/step_2.png
这是最好的解决方案吗?可能不是。
将4个日志记录列添加到包含500,000条记录的数据流中是否有良好的性能?可能不是。
你能想到一个更好的方法吗?
答案 0 :(得分:1)
我真的不认为调用OLEDBCommand 500,000次将是高效的。
如果您已经要进行临时表 - 将它全部加载到临时表,并从T-SQL或其他数据流(或原始文件,然后根据您的完整操作)中取出它。批量插入将大大提高效率。
答案 1 :(得分:0)
如果您真的需要逐行记录信息,请添加到Cade的答案中,最好的方法是利用oledb目标并使用以下一个或两个转换向数据流添加列:
这应该是你最好的选择,不应该增加很多开销