每次我尝试将Excel文件导入SQL Server时都会遇到特定错误。当我尝试编辑映射时,所有数字字段的默认值都是float。我表中的所有字段都没有小数,而且它们不是货币数据类型。它们只有8位数字。但是,由于我不希望我的主键存储为浮点数,当它是一个int时,我该如何解决这个问题呢?它给了我某种截断错误,如果需要我会发布一个屏幕截图。这是一个常见的问题吗?
应该注意的是,我无法导入Excel 2007文件(我想我已经找到了补救措施),但即使我尝试导入.xls文件,每个包含数字的值都会自动导入为浮点数时我试着改变它我得到一个错误。
答案 0 :(得分:9)
SSIS不会隐式转换数据类型,因此您需要明确地进行转换。 Excel连接管理器只能处理一些数据类型,它会尝试根据文件的前几行进行最佳猜测。这在SSIS文档中完全是documented。
您有几种选择:
INSERT
或CAST
将CONVERT
加载到真实目标表中以转换数据您可能还需要注意Import Wizard documentation中有关数据类型映射的注释。
答案 1 :(得分:7)
关闭Derloopkat所说的,转换时仍然失败(没有进攻Derloopkat),因为Excel在这方面很糟糕:
它会打开,检查它以确保它是准确的,然后另存为excel文件。
答案 2 :(得分:4)
当Excel在同一列中找到混合数据类型时,它会猜测列的正确格式是什么(大多数值确定列的类型),并通过插入NULL来解除所有其他值。但是Excel做得非常糟糕(例如,如果列被认为是文本而Excel找到一个数字然后确定该数字是错误并且插入NULL,或者如果某些包含数字的单元格是“文本”格式化的,则可能会得到NULL值到数据库的整数列中。)
解决方案:
请注意,格式化现有Excel工作表上的列是不够的。
答案 3 :(得分:2)
有一种解决方法。
那就是它。
答案 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)
需要考虑的解决方法:
导入完成后,数据库中的数据将包含引号...您可以稍后更新数据以删除引号,或在读取查询中使用“替换”功能,例如“替换([dbo]。[MyTable]。[MyColumn],'''','')“
答案 6 :(得分:0)
以简单的方式避免浮点型字段:
然后将 Excel 表格导出到您的 SQL 服务器。
这种简单的方法对我有用。