首页 新闻 赞助 找找看

关于SSIS的问题

0
悬赏园豆:10 [已关闭问题] 关闭于 2012-06-05 11:52

问题是这样的:

从ERP 取出供应商信息,每日把更新的供应商的信息导出到CSV 文件内。

我的思路是这样的,定义一个供应商导出表,每次取出ERP 的全部供应商的信息。

定义一个导出历史表B,记录导出的SN号,如果是第一此导出 SN=1,如果供应商信息有变化,那么插入一条供应商信息 sn=2 。

具体实现:

1.每次从ERP 取出 供应商数据到MS SQL 数据库的 A 表。

2.每条A 表内的每条供应商信息 与B表内的相同供应商代码的记录信息比较,如果完全一致,那么在A表内删除该记录,如果B表内没有该记录那么A 表内保留该供应商信息,同时在B 表内增加一条相同的供应商信息,同时SN=1. 如果A 表内供应商与B 表内对应供应商不一致,那么B 表内增加一条供应商记录 SN=2 ,以此类推。

3. 最后A 表内保留的是新的或发生变化的供应商信息。

4. 导出A 表的信息到CSV 文件。

目前我的问题是,怎么实现 2步的功能。

这样可以吗?

先用SQL 任务取出A 表内供应商的代码,然后使用FOR 循环 取出 每条供应商的信息 与B 表内对应供应商的SN 最大的记录比较。如果一致 就删除对应的 A 表内对应的供应商的记录。如果不一致就保留 ,同时在b 表内增加记录。

请高手指点我一下。

figofeng的主页 figofeng | 初学一级 | 园豆:5
提问于:2012-05-29 14:17
< >
分享
所有回答(1)
0

http://msdnwebcast.net/webcast/0/4023/ 第二个教程,你可以参考一下

山雨-B | 园豆:234 (菜鸟二级) | 2012-05-29 15:00

我想这样,取得A 表数据然后和历史表B 比较(使用LOOKUP ),如果B 中与A 一致,就对应的更新A 的记录状态为DELETE ,否则更新A的记录状态为INSERT

LOOKUP的时候两边的所有的字段都必须相同才算匹配的。

但是提示我 [SSIS.Pipeline] Warning: The output column "VendorULID" (78) on output "Lookup Match Output" (60) and component "Lookup" (58) is not subsequently used in the Data Flow task. Removing this unused output column can increase Data Flow task performance.

我该怎么办?

我想在这个数据流 里面就是给A 表的记录记录状态, 然后在流程控制里面执行SQL 任务来删除和增加记录到历史表B内。

支持(0) 反对(0) figofeng | 园豆:5 (初学一级) | 2012-05-29 19:49

@figofeng: 貌似这个得用模糊查找吧,跟区相似度加一个条件判断语句分两部分输出

支持(0) 反对(0) 山雨-B | 园豆:234 (菜鸟二级) | 2012-05-30 09:29

@figofeng: 

修改了一下方案:

1. 首先执行sql 命令获得供应商代码 到一个变量

2.变量赋给foreach 循环容器

2.foreach 循环容器里面增加 OLE DB 数据源 取得供应商信息。使用Lookup 与供应商历史表B 比较,完全匹配的记录插入到 delete 表 ,无法匹配的插入到insert 表

 

错误提示:

[OLE DB Source [576]] Error: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80040E21.
An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 10.0"  Hresult: 0x80040E21  Description: "Invalid character value for cast specification".

[SSIS.Pipeline] Error: component "OLE DB Source" (576) failed the pre-execute phase and returned error code 0xC0202009.

支持(0) 反对(0) figofeng | 园豆:5 (初学一级) | 2012-05-30 09:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册