0

我正在使用非规范化的 Access DB 并将其移动到基于 EF 4 的 SQL 中的规范化表中。

假设我在 Access DB 中有以下内容

-------------------
|  NAME  | FRUIT  |
-------------------
| John   | Apple  |
| Jane   | Apple  |
| Mark   | Orange |
| Nancy  | Orange |
| Jim    | Apple  |
-------------------

我在 SQL 中创建以下两个数据库

名称:

-------------------------------
|   ID   |  Name  |  FruitID  |
-------------------------------
|    1   |  John  |     1     |
|    2   |  Jane  |     1     |
|    3   |  Mark  |     2     |
|    4   |  Nancy |     2     |
|    5   |  Jim   |     1     |
-------------------------------

tbl水果:

--------------------
|   ID   |  Fruit  |
--------------------
|    1   |  Apple  |
|    2   |  Orange |
--------------------

在我的数据流中,我可以使用派生列提取名称(表实际上更大,我正在做一些数据类型转换)。但是,如何从派生列获取输出,并将每一行的输出与 fruits 表的正确 ID 匹配,从而产生需要插入 tblNames 数据库的正确输出?

4

1 回答 1

2

假设在填充 tblNames 的数据流之前已经填充了 tblFruits,您需要将查找转换添加到序列中,以便您可以检索给定水果的正确 tblFruits.ID。

您没有指定您使用的是哪个版本的 SSIS,但需要注意的是它希望始终在目标表中找到匹配项。在 2005 年,找不到匹配项与表不存在或您缺乏权限的错误相同,这很痛苦。2008+ 允许您识别在目标表中未找到匹配项的行。

使用查找时要记住的最重要的事情是,您应该只拉回您需要的列。表格选择器很方便,但不要偷懒并单击它。它会消耗比你需要的更多的资源,而你所知道的只是“SSIS 速度太慢而且是垃圾”。

其他有用且未经询问的建议是不要在派生列中执行太多操作。相反,请使用具有紧密焦点的多个派生列。听起来违反直觉,但 SSIS 引擎可以通过这种方式更好地并行化操作。

我不确定 EF 标签是如何应用的,但也许我错过了问题的一些细微差别。

于 2012-09-28T15:50:13.193 回答