SSIS保持强制更改excel源字符串浮动


9

Excel中有一列应该是文本,但是SSIS在那里看到数字文本,并自动使其成为双精度浮点[DT_R8]。

我可以在“输出”分支的“外部”和“输出”列中手动更改它,但是“错误输出”只是拒绝让我更改相应的列。

Error at Extract Stations [Excel Source [1]]: The data type for "output "Excel Source Error Output" (10)" cannot be modified in the error "output column "Group No" (29)".
Error at Extract Stations [Excel Source [1]]: Failed to set property "DataType" on "output column "Group No" (29)".

我尝试修改包xml。我尝试了IMEX=1typeguessrow=0但这些都没有解决我的问题。这有什么解决办法吗?也有文章建议您修改注册表,以便excel在猜测数据类型之前读取更多的行,然后读取默认的8行。我不想走这条路,因为即使它可以工作,那我也必须在打算运行该程序包的计算机上修改注册表。

例如,要导入到SQL nvarchar字段中的excel字段为

295.3
296.33

但是它们以下列方式写入SQL表

295.30000000000001
296.32999999999998

我放入数据查看器,字段显示

295.3
296.33

一直到执行都是正确的,但是我猜它在到达OLE DB Destination源时会以某种方式将其转换为

295.30000000000001
296.32999999999998

这是错误的。

我还具有诸如V321.1和V213.34之类的值,例如它们绝对不是整数,需要存储为varchar。


评论不作进一步讨论;此对话已转移至聊天
保罗·怀特9

Answers:


2

是否有可能将文件作为.csv文件获得,而该文件可以像文本文件一样导入并且不会出现此问题?我通常会退回所有Excel文件并要求其他格式,因为SSIS和Excel在许多级别上不能很好地配合使用。


1
我希望在不久的将来对.csv或txt文件进行更改。将使事情变得容易得多。
胡安·贝莱斯

2

似乎无法解决此问题。Excel会查看列中数据的前几行,并且无论如何都将始终将数据类型强制为FLOAT。我得到了一个解决方案,即创建一个在前几行(8+)中包含几个varchar字符的模板,以便EXCEL将其作为数据类型,然后导入我的数据。因为我正在使用Source Safe,所以有帮助的事情是,我可以“检入”一个文件,以便将其包装文件设置为“只读”,以便Visual Studio无法更改我的预定义数据类型。


1

步骤1:添加IMEX=1; MAXROWSTOSCAN=0连接字符串(例如Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Source\filename.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES;IMEX=1; MAXROWSTOSCAN=0")。

步骤2:关闭解决方案。在文本编辑器中打开SSIS包,找到使列保持反向还原为预定义数据类型的列。在XML文件中手动将其更新为所需的格式。

步骤3:在SQL Server数据工具中打开包并执行,现在您应该能够从文件中加载数据了。


抱歉,包中没有源数据类型。仅目标列类型。由于转换仍然发生在Microsoft.Ace驱动程序(或选择的任何一个驱动程序)内部,并且在进入SSIS和目标表时已经发生了数据丢失,这再次破坏了目标。
逆向工程师
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.