我在SQL Server(2016 SP2 CU6)的SSIS中运行了一个dtsx程序包,它的轻量级任务是将Excel(xlsx)工作表按原样导入到SQL表中,在此阶段无需进行任何转换,是一个代理工作,它可以做很多事情,但是我可以看到错误仅在本节中发生。
我看到的问题是Excel中的数字(0.0153
)在SQL中出现,好像转换得不好(1.5299999999999999E-2
)。
要确认Excel中的数字为0.0153
,而不是更长或没有格式的数字。
导入后,这就是我所拥有的--
我觉得这很奇怪:-
0.193841
,这在总体上也很相似),则应使用采样来了解数据类型范围是-29到200,最多7个小数位) Excel中的数字格式为General
,SQL中的列为NVARCHAR(255)
在SSIS包中,外部列的Excel源数据类型被归类为double-precision float [DT-R8]
(不确定它来自何处,但我无权对其进行更改)和< em>输出列为Unicode string [DT-WSTR]
然后我正在使用Native OLE DB\SQL Server Native Client 11.0
OLD DB Connection来访问表。
这是一个简单的程序包,但是为什么这个值如此之大。它不是一次关闭,输入大约有1700行,我们在许多行上都看到了这一点。
答案 0 :(得分:4)
在公司环境中,我们不能总是选择源和目标数据,有时我们只需要“使其工作”即可。 Excel尤其是SSIS中的一场噩梦,它所要做的就是对输入文件进行一次错误的更改,并且由于元数据不再匹配,您的工作失败了。
是的,理想情况下,这是数字数据,应存储在数字数据字段(而不是字符串/字符字段)中。
这是我过去完成此方案的方式,希望它能适合您的情况,但实际上取决于所得数据的用途。
2.添加第二个数据转换步骤,将十进制值转换回Unicode字符串
3.更改您的OLE DB目标映射,以使用第二个数据转换任务中的新输出列。
结果: