KB3051993 - FIX: The value of NUMBER type is truncated when you select data from an Oracle-linked server by using OLE DB provider

Applies to: SQL Server 2012 DeveloperSQL Server 2012 EnterpriseSQL Server 2012 Standard


When you execute a query to select data from an Oracle-linked server by using OLE DB provider in Microsoft SQL Server 2012 or SQL Server 2014, the values in the NUMBER type column may be truncated in the query result.


This issue occurs because, the Oracle NUMBER type with non-declared precision/scale may not have a clear 1:1 mapping to a SQL Server data type. Before SQL Server 2012 SP2 CU2, SQL Server maps such values to strings to make sure that no loss of precision happens. However, that could lead to incorrect results if the query required sort order on such values. In SQL Server 2012 SP2 CU2, the mapping is changed to numeric (38, 0) to allow for representation of big integer keys which some database schemas are using NUMBER without precision/scale for. This leads to regressions when non-integer values are needed.


After you apply this fix, NUMBER values with unknown precision/scale are treated as double values with OLE DB provider. If the precision is important and the range of the values is not large enough, you can enable the new Trace Flag 7314 that would start treating such values as numeric (38, 10).


To work around this issue, convert the Oracle field from NUMBER type to a data type that is fully supported by SQL Server first.


Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.