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_DBTIMESTAMP
或DT_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源格式隐式转换