SSIS导入Exceldate错误(截断错误)

我很抱歉发表看起来很简单的问题,但我找不到答案,而且我正在浪费时间(而不是几个小时)。 我对SSIS相当陌生,它只是踢我的背后。

背景:

非常简单的SSIS包可以将Excel工作表导入到SQL Server中的登台表中。 由于我不想通过使用错误的术语来误导任何人,因此我会将Excel源和EXCEL表作为目标表。

这个软件包曾经工作过。 但是,由于date列的数据截断,它现在失败。 Excel列已被格式化为DATE(在DATE中我已经尝试了几种不同的格式选项)。 目标列也是DATE列(不是date时间)。 Excel中的数据主要是空的单元格,有一些零星的值。 我认为这些错误是从数据中出现的date(而不是空白)开始的。

我曾尝试使用高级编辑器双方(Excel和目标),并尝试了无数的数据types设置,但我一直得到同样的失败。 我怀疑现在已经搞糟了我所做的各种testing。

我也试着为date字段“date [DT_DATE]”添加一个数据转换转换 – 这是行不通的。 而且,我已经尝试创build派生列 – 首先基于Excel列,然后在Transformed列。 所有这些尝试都失败了。

问题:

1)将Excel数据导入到DATE列的SQL Server的最佳做法是什么?

2)由于这是两个非常成熟的微软应用程序(Excel和SQL Server)一起工作,似乎应该是简单的。 这使我相信,我必须在这里错过一些基本概念。 任何人都可以设置我吗?

3)你们如何获得一个Exceldate到SQL Server?

4)编辑后同步列的技巧是什么?

感谢您提供的任何见解。 对不起,打扰你看起来很简单。

大卫

就个人而言,我不认为有一个最佳的练习date,这对我来说总是很痛苦。

如果你可以格式化的Excel文件尝试将其更改为“文本”。 它将导入为Unicode而不是date。 如果不是,请尝试将“数据转换”任务中的列转换为Unicode

在完成之后,您将需要使用“派生列”任务。 以您想要的格式构builddate。

MM/dd/yyyy hh:mm:ss例子

build立为yyyy-MM-dd

 SUBSTRING(datecolumn,7,4)+ "-" + SUBSTRING(datecolumn,1,2)+ "-" +SUBSTRING(datecolumn,4,2) 

可能是粗糙的,但保存我的理智。

如果date类似m/d/yyyy在Jan或其他东西中不包含2个值,那么您将在月份部分中添加一些类似的内容。

 RIGHT("0" + SUBSTRING(datecolumn,1,FINDSTRING(datecolumn,"/"1)-1),2) 

祝你好运

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

如果所有的date值存储为date(而不是文本),从Excel工作表导入date的最佳做法是从Excel中转​​换DATE为数字格式"0.000000000" (在Excel中称为串行date时间或编程使用库Microsoft.Office.Interop.Excel

你可以参考这个链接,但使用以下内容:

 xlCells.NumberFormat = "0.0000000" 

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

*假设inColumn是具有数字types的Date列,请添加types为DT_DBTIMESTAMPDT_DATE的输出列outColumn ,并使用以下代码:

 If Not Row.inColumn_IsNull Then Row.OutColumn = DateTime.FromOADate(CDbl(Row.inColumn)) Else Row.OutColumn_IsNull = True End If 

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

  • 要在Excel中阅读更多关于DateTime的信息,可以参考这个链接

  • 要详细了解可在SSIS中隐式转换为date的date时间格式,请按照date时间的SSIS源格式隐式转换