症状
在 Microsoft SQL Server 2012 或 SQL Server 2014 中使用 OLE DB 提供程序执行查询以从 SQL Server 中选择数据时,查询结果中 NUMBER 类型列中的值可能会被截断。
原因
出现此问题的原因是,具有未声明精度/缩放的 Oracle NUMBER 类型可能没有与 SQL Server 数据类型的明确 1:1 映射。 在 SQL Server 2012 SP2 CU2 之前,SQL Server 会将此类值映射到字符串,以确保不会丢失精度。 但是,如果查询需要此类值的排序顺序,则可能会导致不正确的结果。 在 SQL Server 2012 SP2 CU2 中,映射更改为数字 (38,0) ,以允许表示某些数据库架构使用没有精度/缩放的 NUMBER 的大整数键。 当需要非整数值时,这会导致回归。
解决方法
应用此修补程序后,精度/刻度未知的 NUMBER 值将被视为 OLE DB 提供程序的双精度值。 如果精度很重要且值范围不够大,则可以启用新的跟踪标志 7314,它会开始将此类值视为数字 (38、10) 。
此问题已首先在 SQL Server 的以下累积更新中修复。
SQL Server 2014 SP1 累积更新 1 /en-us/help/3067839
SQL Server 2014 累积更新 8 /en-us/help/3067836
SQL Server 2012 SP2 累积更新 6 /en-us/help/3052468
关于 SQL Server 的累积更新
SQL Server 的每个新累积更新都包含上一个累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
解决方法
要解决此问题,请先将 Oracle 字段从 NUMBER 类型转换为 SQL Server 完全支持的数据类型。
状态
Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。
第三方信息免责声明
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。