我很抱歉发表了一个看似很简单的问题,但我找不到答案,我在浪费时间(而不是现在的几个小时)。我对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)编辑后同步列的诀窍是什么?
谢谢你能提供的任何见解。很抱歉用看起来很简单的事情来打扰你们。
大卫
发布于 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,但可以使用以下方法:
xlCells.NumberFormat = "0.0000000"然后在SSIS包中使用脚本组件使用DateTime.FromOADate()函数再次将其转换为日期。
*假设inColumn是具有数字类型的Date列,添加一个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注意:当将列转换为数字格式时,您忽略了所有格式,但仍然具有日期值。
https://stackoverflow.com/questions/42654040
复制相似问题