从Excel导入到SQL Server 2008时转换数据类型时出错

时间:2012-03-21 16:03:28

标签: sql-server sql-server-2008

每次我尝试将Excel文件导入SQL Server时都会遇到特定错误。当我尝试编辑映射时,所有数字字段的默认值都是float。我表中的所有字段都没有小数,而且它们不是货币数据类型。它们只有8位数字。但是,由于我不希望我的主键存储为浮点数,当它是一个int时,我该如何解决这个问题呢?它给了我某种截断错误,如果需要我会发布一个屏幕截图。这是一个常见的问题吗?

应该注意的是,我无法导入Excel 2007文件(我想我已经找到了补救措施),但即使我尝试导入.xls文件,每个包含数字的值都会自动导入为浮点数时我试着改变它我得到一个错误。

http://imgur.com/4204g

7 个答案:

答案 0 :(得分:9)

SSIS不会隐式转换数据类型,因此您需要明确地进行转换。 Excel连接管理器只能处理一些数据类型,它会尝试根据文件的前几行进行最佳猜测。这在SSIS文档中完全是documented

您有几种选择:

  • 将目标数据类型更改为float
  • 使用导入向导加载到数据类型为float的'staging'表,然后使用INSERTCASTCONVERT加载到真实目标表中以转换数据
  • 创建一个SSIS包并使用Data Conversion转换来转换数据

您可能还需要注意Import Wizard documentation中有关数据类型映射的注释。

答案 1 :(得分:7)

关闭Derloopkat所说的,转换时仍然失败(没有进攻Derloopkat),因为Excel在这方面很糟糕:

  1. 从excel粘贴到记事本中并保存为正常(.txt文件)。
  2. 从excel中,打开.txt文件。
  3. 选择下一步,因为它显然是制表符分隔符。
  4. 为文本限定符选择“none”,然后再次选择。
  5. 选择第一行,按住shift,选择最后一行,然后选择文本径向按钮。单击“完成”
  6. 它会打开,检查它以确保它是准确的,然后另存为excel文件。

答案 2 :(得分:4)

当Excel在同一列中找到混合数据类型时,它会猜测列的正确格式是什么(大多数值确定列的类型),并通过插入NULL来解除所有其他值。但是Excel做得非常糟糕(例如,如果列被认为是文本而Excel找到一个数字然后确定该数字是错误并且插入NULL,或者如果某些包含数字的单元格是“文本”格式化的,则可能会得到NULL值到数据库的整数列中。)

解决方案:

  1. 使用第一行中的列名称创建新的Excel工作表
  2. 将列格式化为文本
  3. 将行粘贴到无格式(使用CVS格式或在记事本中复制/粘贴以仅获取文本)
  4. 请注意,格式化现有Excel工作表上的列是不够的。

答案 3 :(得分:2)

有一种解决方法。

  1. 导入Excel数据为浮点数(默认值)。
  2. 导入后,转到表格设计
  3. 将列的DataType从Float更改为Int或Bigint
  4. 保存更改
  5. 将列的数据类型从Bigint更改为任何文本类型(Varchar,nvarchar,text,ntext等)
  6. 保存更改。
  7. 那就是它。

答案 4 :(得分:1)

在处理数据类型问题时,似乎有一个真正的简单解决方案。

基本上,在Excel连接字符串的末尾添加;IMEX=1;"

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\YOURSERVER\shared\Client Projects\FOLDER\Data\FILE.xls;Extended Properties="EXCEL 8.0;HDR=YES;IMEX=1";

这将解决数据类型问题,例如值与文本和数字混合的列。

要获取连接属性,请右键单击控制流下方的Excel连接管理器并单击属性。它将在解决方案资源管理器下面的右侧。希望有所帮助。

答案 5 :(得分:0)

需要考虑的解决方法:

  1. 保存excel文件的副本,将列修改为格式类型'text'
  2. 复制列值并粘贴到文本编辑器,保存文件(称之为 tmp.txt )。
  3. 修改文本文件中的数据以使用字符开头和结尾,以便SQL Server导入机制将识别为文本。如果您有精美的编辑器,请使用附带的工具。我在我的Windows笔记本电脑上使用awk in cygwin。例如,我使用单引号开始结束列值,例如“ $ awk'{print”\ x27“$ 1”\ x27“}'。/ tmp.txt> ./tmp2.txt
  4. 将来自tmp2.txt的数据复制并粘贴到excel文件中必要列的顶部,然后保存excel文件
  5. 为修改后的excel文件运行sql server导入...请务必仔细检查导入程序选择的数据类型是否为数字...如果是,请使用不同的字符集重复上述步骤
  6. 导入完成后,数据库中的数据将包含引号...您可以稍后更新数据以删除引号,或在读取查询中使用“替换”功能,例如“替换([dbo]。[MyTable]。[MyColumn],'''','')

答案 6 :(得分:0)

以简单的方式避免浮点型字段:

  1. 打开你的 Excel 表格..
  2. 在标题行后插入空白行并在所有单元格中键入(任何文本)。
  3. 鼠标右键单击导致浮动问题的列的头部并选择(设置单元格格式),然后选择类别(文本)并按确定。

然后将 Excel 表格导出到您的 SQL 服务器。

这种简单的方法对我有用。