Sql server bcp for Linux在导入非常小的数据值时失败,例如“-1.28212683287E-308”
使用Linux版本的bcp实用程序将数据导入SQL Server 2016。并且,对于其中一列中数据值非常小的数据行(如-1.28212683287E-308),导入失败 我们正在从Sybase ASE v12.5.1迁移到SQL Server 2016。此外,我们正在将一个现有的数据导入过程迁移到SQL Server 2016,该过程将大量数据从包含数百万行daa的数据文件加载到Sybase ASE 12.5.1系统上的数据库中 该过程目前在Sybase ASE上成功运行,没有问题,包括加载值非常小的数据时,如-1.28212683287E-308 但是,将值非常小的数据(如-1.28212683287E-308)导入SQL Server 2016时,相同的过程失败Sql server bcp for Linux在导入非常小的数据值时失败,例如“-1.28212683287E-308”,sql-server,Sql Server,使用Linux版本的bcp实用程序将数据导入SQL Server 2016。并且,对于其中一列中数据值非常小的数据行(如-1.28212683287E-308),导入失败 我们正在从Sybase ASE v12.5.1迁移到SQL Server 2016。此外,我们正在将一个现有的数据导入过程迁移到SQL Server 2016,该过程将大量数据从包含数百万行daa的数据文件加载到Sybase ASE 12.5.1系统上的数据库中 该过程目前在Sybase ASE上成功运行,没有问题,包括加载值
但是,使用Windows版本的Linux,使用非常小的数据值(如-1.28212683287E-308)执行相同的数据加载没有问题 以下是用于执行数据加载的bcp命令行:
/sales/mssql-tools/bin/bcp chireldatadb..xe_data in /logs/tmp/isql.sh_data_20191009_124320_ld-atl-syn0gs_43025.bcp -e /tmp/in.chireldatadb..xe_data.err -b 1000 -D -S LAMSQL1 -U ###### -P ###### -c -r '|\n' -t '\|'
使用Windows版本的Linux???我想你是指sql server的Windows版本吧?即使如此,该字符串在Windows上转换为0,我认为这是导致错误的原因。选择convertfloat53,'-1.28212683287E-308',您必须决定使用这些值实际希望发生什么-1.28212683287E-308太小,无法用SQL Server的浮点表示,因为它不支持非规范化值。如果接受,则必须四舍五入为0。最好的方法可能是确保您不依赖于bcp的哪个版本决定舍入以及为什么舍入,而是从一个视图进行复制,在这些不可表示的值进入导入之前将其舍入为0。如果您没有导入到浮动列中,这是bcp内部的问题。您会遇到什么错误?顺便说一句,就浮点范围而言,无论您是在Windows上使用SQL Server还是在Linux上使用SQL Server,行为都应该是相同的-区别应该只存在于bcp中,后者正在进行实际的数据加载。如果你发现了行为上的差异,MS可能会考虑需要修复的bug。他们可能认为BCP差异也是一个需要修复的错误,但如果是这样,它至少会是一个不太重要的一个。谢谢你的反应和捕捉。抱歉,我的意思是使用Windows版本的bcp键入,而不是使用Windows版本的Linux。其他一些信息: