导入数据向导不喜欢我为某一列选择的数据类型

9

是否有其他人遇到过相同的问题,当您从Excel文件导入数据到MSSQL Server 2005时,如果某列包含大部分数字数据,但即使将该列类型设置为varchar,向导也无法导入那些无法解析为数字的字段?

6个回答

17

尝试以下方法(注:这些说明基于Excel 2007):

按照以下步骤,可以强制Excel将列视为文本:

使用Excel打开电子表格。

通过单击列标头选择包含“大部分数字数据”的整个列。

单击功能区菜单上的数据选项卡。

选择“文本到列”选项。这将显示“文本转换向导”。

在第1步上:单击“下一步”。

在第2步上:单击“下一步”。

在第3步上:选择“文本”,然后单击“完成”。

保存Excel表格。

使用SQL Server 2005导入数据向导重试导入过程。


不幸的是我只有 Excel 2002。我不得不将表格另存为制表符分隔的文本文件来解决问题,这带来了其他一些麻烦,但经过一番处理后还是成功了。 - Haoest
我认为在Excel 2002中,“文本分列”选项位于“数据”菜单下。 - Joe L.
这似乎对我也几乎有效(使用Excel 2007)。然而,逗号被从值如47,100中剥离,变成了只有47100,这是不可接受的。(该值不是一个数字!它是由逗号分隔的47和100)。很难相信这是一个多么大的问题,有这么多人表达了他们的沮丧,但没有真正简单的答案。 - Funka
略微变化...我选择了整个列,右键单击,格式化单元格->并在第一个选项卡上选择“文本”。 - Ben Amada

5

您需要编辑SSIS使用的连接字符串。将“IMEX=1;”(不带引号)添加到字符串末尾,这告诉SSIS/jet不要尝试找出数据类型,只需导入它们即可。


4

您可以尝试调整Jet设置以导入Excel数据。在进行给定的导入时,您可以强制Jet引擎对整个工作表进行采样,以确定列类型。更改以下注册表键(首先进行备份),然后查看是否有效:

HKLM\Software\Microsoft\Jet\4.0\Engines\Excel

在x64上也是如此。
HKLM\Software\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel

将值TypeGuessRows设为零。这将强制Jet采样所有行以确定列类型。

这似乎是对于每一列读取每一行。对于有许多行的大型表格,这可能需要很长时间。 - Michael Green
的确如此。然而,另一种选择是系统根据前100行左右的数据猜测某个列应该是数字或日期,然后在第748,456行出现错误导致整个过程失败,你不得不重新开始。 - Thomas

0

在设置HDR之前添加IMEX=1对我有用。


0
创建一个新列,它是一个撇号 + 您要导入的列的内容。这将强制将其作为字符串
=“'”&E2

0

这是最佳解决方案:

  1. 在功能区菜单上点击“文件”,然后点击“选项”。

  2. 点击“高级”,然后在“计算工作簿时”下选择“按显示设置精度”复选框,然后点击“确定”。

  3. 点击“确定”。

  4. 在工作表中选择要格式化的单元格。

  5. 在“开始”选项卡上,点击“数字”旁边的“对话框启动器”按钮图像。

  6. 在“类别”框中,点击“数字”。

  7. 在“小数位数”框中输入您想要显示的小数位数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接