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

woo*_*gie 9 sql-server sql-server-2008

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

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

http://imgur.com/4204g

Pon*_*ife 9

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

你有几个选择:

  • 将目标数据类型更改为float
  • 使用导入向导加载到数据类型为float的'staging'表,然后INSERT使用CASTCONVERT转换数据到实际目标表中
  • 创建SSIS包并使用数据转换转换来转换数据

您可能还需要注意导入向导文档中有关数据类型映射的注释.


Jac*_*ter 7

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

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

它将打开,检查以确保它是准确的,然后保存为Excel文件.


小智 6

有一个解决方法。

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

就是这样。


der*_*kat 5

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

解决方案:

  1. 使用第一行中的列名创建一个新的 Excel 工作表
  2. 将列格式化为文本
  3. 粘贴不带格式的行(使用 CVS 格式或在记事本中复制/粘贴以仅获取文本)

请注意,仅格式化现有 Excel 工作表上的列是不够的。