0

我正在使用 SQL Server 商业智能开发工作室 - > 集成服务项目

我的任务是使用 Excel 文件作为输入源。将 excel 工作表值插入 DB [目标源] 表 [SQL 2008]

我的 Excel 格式 [我使用的是 MS-Office 2013]

 ID|Tier|TierType|Age|Count
 ==========================
 1   4             18  0.652
 2   4    EV           2.569
 3   5    EG       25  1.035
 .   .    .         .   .
 .   .    .         .   .
 .   .    .         .   .
800  4    EE       40  1.526

我的数据库表设计

Tier    - int
TierType- varchar(5)
Age     - int
Count   - float

表输出。

ID|Tier|TierType|Age|Count
==========================
1   4    NULL     18   0.652
2   4    EV       NULL 2.569
3   5    EG       25   1.035
.   .    .         .   .
.   .    .         .   .
.   .    .         .   .
800 4    EE       40  1.526

我能够成功地将 excel 工作表值插入到 DB 表中。

我的问题是

在 excel 表中,前 8 条记录为空,从 9 条记录开始,值如下所示:-

ID|Tier|TierType|Age|Count
==========================
1  
2
3
4
5
6
7
8
9  4      EE     20   0.256

如果前 8 条记录为空,则 DB 表中的 (int[Tier,Age],float[Count]) 的剩余值也显示为空。Varchar 值显示正确

表输出。

ID|Tier|TierType|Age|Count
==========================
1   NULL  NULL   NULL  NULL 
2   NULL  NULL   NULL  NULL 
3   NULL  NULL   NULL  NULL 
4   NULL  NULL   NULL  NULL 
5   NULL  NULL   NULL  NULL 
6   NULL  NULL   NULL  NULL 
7   NULL  NULL   NULL  NULL 
8   NULL  NULL   NULL  NULL 
9   NULL  EE     NULL  NULL 
.
.
.
800 NULL  EC     NULL  NULL

请告诉它是默认问题,或者我在创建包时犯了错误。

4

2 回答 2

0

我会在您的 Excel 源和 OLE DB 目标之间添加一个条件拆分组件。然后我会在那里使用一个表达式来检测你何时有空值。如果 Teir 为 null 就足够了,那么您的表达式将是

IsNull([Tier])

如果您需要检查所有字段是否为空,那么您将使用&&and 运算符使其像

IsNull([Tier]) && IsNull([TierType]) && IsNull([Age]) && IsNull([Count])

无论您的业务逻辑是什么,都可以使用这种表达式来过滤掉所有空行。

@JodyT 提到的另一种选择是,如果总是有N 行是空的,那么您可以修改连接管理器以跳过这些行。

于 2014-07-27T01:07:14.593 回答
0

excel 提供程序使用前 8 行来确定数据类型。(更多信息)您可以通过更改服务器上的注册表设置来更改该行为,但如果前 8 行始终为空,那么您也可以在 Excel 工作表上使用一个范围查询(而不是获取整个工作表):

SELECT * FROM [Sheet1$ 范围]

从 [Sheet1$A2:B10] 中选择 *

于 2014-07-27T06:59:45.000 回答