我正在使用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工作表值插入到数据库表中。
我的问题是
在Excel工作表中,前9个记录中的前8个记录为空,下面是以下示例: -
ID|Tier|TierType|Age|Count
==========================
1
2
3
4
5
6
7
8
9 4 EE 20 0.256
如果前8个记录为空,则剩余的值也会在DB表中显示为null(int [Tier,Age],float [Count])。值数值正确显示
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
请告诉它默认问题或我在创建包时犯了错误。
答案 0 :(得分:0)
我会在Excel源和OLE DB目标之间添加一个条件性拆分组件。然后我会在那里使用一个表达式来检测何时有空值。如果Teir为null就足够了,那么你的表达式就是
IsNull([Tier])
如果您需要检查所有字段是否为空,那么您可以使用&&
和运算符使其像
IsNull([Tier]) && IsNull([TierType]) && IsNull([Age]) && IsNull([Count])
无论您的业务逻辑是什么,请使用此类表达式过滤掉所有空行。
@JodyT提到的一个替代方案是,如果总是 N行为空,那么您可以修改连接管理器以跳过这些行。
答案 1 :(得分:0)
excel提供程序使用前8行来确定数据类型。 (more info)您可以通过更改服务器上的注册表设置来更改该行为,但如果前8行始终为空,那么您还可以在excel表上使用带有范围的查询(而不是整个片):
SELECT * FROM [Sheet1 $ range]
SELECT * FROM [Sheet1 $ A2:B10]