Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 日期值为的Excel单元格未通过SSIS正确导入_Sql Server 2008_Excel_Ssis - Fatal编程技术网

Sql server 2008 日期值为的Excel单元格未通过SSIS正确导入

Sql server 2008 日期值为的Excel单元格未通过SSIS正确导入,sql-server-2008,excel,ssis,Sql Server 2008,Excel,Ssis,我有一个Excel'97电子表格,它是由一个外部自动流程生成的,我想通过SSIS将其导入SQL[2008 R2]表。我要导入的列在某些单元格中包含文本值,在其他单元格中包含日期值。要连接到Excel数据,我有一个“Excel源”数据流源,其中OpenRowset属性已设置为特定列范围:Sheet1$A1:A100。我在Excel源代码之后直接添加了一个网格数据查看器,以便查看“原始”结果 执行包时,我查看Data Viewer结果,所有包含日期的单元格都作为空值显示。奇怪的是,文本字段和数字字段

我有一个Excel'97电子表格,它是由一个外部自动流程生成的,我想通过SSIS将其导入SQL[2008 R2]表。我要导入的列在某些单元格中包含文本值,在其他单元格中包含日期值。要连接到Excel数据,我有一个“Excel源”数据流源,其中OpenRowset属性已设置为特定列范围:Sheet1$A1:A100。我在Excel源代码之后直接添加了一个网格数据查看器,以便查看“原始”结果

执行包时,我查看Data Viewer结果,所有包含日期的单元格都作为空值显示。奇怪的是,文本字段和数字字段很好地显示在Data Viewer中。如果我在日期值前面加上一个引号(撇号),以便它将日期视为文本,它将正确导入。如果我右键单击Excel中的一个日期字段并转到“设置单元格格式…”,它们都显示为“日期”

这些Excel文件是由一个我无法控制的过程自动生成的,我无法手动编辑每个文件以使其正确导入。在Excel源代码的外部列部分中,该列显示的数据类型为“Unicode字符串[DT_WSTR]”,因此我认为它只会将其作为文本导入


如果您能就如何正确导入这些日期值提出建议,我将不胜感激。提前谢谢你

我不知道在SSIS中是否有“好”的方法来处理这种情况,但我可以想出一些或多或少丑陋的想法。为了增加黑客性:

  • 要求向您提供这些文件的人使用更友好的数据库格式(而不是列的数据类型随行变化的格式)
  • 如果您提前知道哪些行将包含文本,哪些行将包含日期,您可以尝试多次打开电子表格,每次更改范围,以便数据类型一致
  • 您可以在Excel中手动打开电子表格并将其保存为文本文件;然后将文本文件馈送到SSIS包。所有日期都将转换为文本(基于您的区域设置)
  • 您可以编写一个Windows脚本,在Excel中打开电子表格并将其保存为文本文件,然后将文本文件提供给SSIS包
  • 您可以编写一个SSIS脚本任务,该任务使用Excel自动化模型打开电子表格,并以任何适当的方式处理每个单元格
  • 您可以滚动自己的Excel连接管理器,该管理器可以配置为将特定范围内的所有单元格视为文本。(嗯,这可能是通过黑客攻击和牦牛剃须。)

  • 我认为#1是最好的长期解决方案,但听起来不会很快实现。这就是说,将电子表格保存为文本至少会使它成为SSIS可以轻松处理的内容,这可能足以克服当前的障碍。

    您说您的列混合了文本和日期值,并且该列将作为“字符串”导入。由于日期在Excel中以数值形式存储(并且仅显示为文本),这可能就是为什么您的日期显示为空。一个好的开始是至少使列数据类型保持一致。听起来问题在于创建excel文档的任何进程。这些值的格式是什么?复制并粘贴该过程为您提供的值的示例,以便我们了解如何将其写入excel文件。首先,感谢所有的宝贵意见和建议。最后,我发现了一篇文章,详细介绍了如何查看前8个字符来确定数据类型。为了解决这个问题,我在连接字符串的末尾添加了“IMEX=1”文本-请参阅。一旦我这样做了,它就正确地导入了日期字段。同样,我无法从我的客户处更改此Excel文档的格式,因此我必须以这种方式处理它。再次感谢!不客气-感谢您提供指向IMEX=1提示的指针!