首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入Excel日期时SSIS错误(截断错误)

问导入Excel日期时SSIS错误(截断错误)
EN

Stack Overflow用户
提问于 2017-03-07 17:02:23
回答 1查看 1.5K关注 0票数 3

我很抱歉发表了一个看似很简单的问题,但我找不到答案,我在浪费时间(而不是现在的几个小时)。我对SSIS相当陌生,它只是在踢我的屁股。

背景:

非常简单的SSIS包可以将Excel工作表导入Server中的暂存表中。由于我不想通过使用错误的命名来误导任何人,所以我将将Excel源代码称为Excel,而将Server表称为目标表。

这个包以前起过作用。但是,由于日期列的数据截断,它现在失败了。Excel列已格式化为日期(我在日期内尝试了几个不同的格式选项)。目标列也是日期列(而不是日期时间)。Excel中的数据主要是空单元格,有一些零星的值。我认为,当日期开始出现在数据中时(而不仅仅是空白),错误就开始了。

我尝试过使用高级编辑器(Excel & Target),并尝试了大量的数据类型设置,但我始终遇到同样的失败。我怀疑现在我所做的各种测试都搞砸了。

我还尝试为日期字段“dateDT_DATE”添加一个数据转换--这是不起作用的。而且,我已经尝试创建一个派生列--首先基于Excel列,然后是转换后的列。所有这些尝试都失败了。

问题:

1)将Excel数据导入日期列的Server中的最佳做法是什么?

2)由于这是两个非常成熟的Microsoft应用程序(Excel和SQL Server)协同工作,所以看起来应该很简单。这使我相信,我在这里肯定遗漏了一些基本概念。有人能纠正我吗?

3)如何将Excel日期输入Server?

4)编辑后同步列的诀窍是什么?

谢谢你能提供的任何见解。很抱歉用看起来很简单的事情来打扰你们。

大卫

EN

回答 1

Stack Overflow用户

发布于 2017-03-08 19:27:58

从excel工作表导入数据时的主要问题是excel中的每一列可以有多种数据类型或格式,因此同一列可以包含日期和数字以及具有不同格式的文本或日期(某些格式不能在SSIS中隐式转换为日期)。

如果所有日期值都存储为日期(而不是文本),则从excel工作表导入日期的最佳做法是从excel将DATE转换为数字格式"0.000000000" (在excel中称为Serial __),或者使用Microsoft.Office.Interop.Excel之类的库进行编程。

您可以引用此https://social.msdn.microsoft.com/Forums/vstudio/en-US/a5cc653e-d6e4-4a4a-a5f9-23e95671f7c1/formatting-an-excel-column-with-vbnet?forum=vbgeneral,但可以使用以下方法:

代码语言:javascript
复制
xlCells.NumberFormat = "0.0000000"

然后在SSIS包中使用脚本组件使用DateTime.FromOADate()函数再次将其转换为日期。

*假设inColumn是具有数字类型的Date列,添加一个DT_DBTIMESTAMP或DT_DATE类型的输出列outColumn并使用以下代码:

代码语言:javascript
复制
If Not Row.inColumn_IsNull Then

    Row.OutColumn = DateTime.FromOADate(CDbl(Row.inColumn))

Else 

    Row.OutColumn_IsNull = True

End If

注意:当将列转换为数字格式时,您忽略了所有格式,但仍然具有日期值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42654040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档