FIX: Data type conversion error due to late evaluation of a filter predicate in a query involving a column store index in SQL Server 2016

A következőkre vonatkozik: SQL Server 2016 DeveloperSQL Server 2016 EnterpriseSQL Server 2016 Enterprise Core

Symptoms


Consider the following scenario:

  • You use a database with the compatibility level set to 130 in Microsoft SQL Server 2016.
  • You execute a query that accesses a column store index and a row store index or a heap, and includes a filter predicate (WHERE clause).
In this scenario, SQL Server will not be able to push the filter predicate closer to the data source operator (table or index scan or seek). This may cause suboptimal query performance.

In addition, if the query uses an expression (such as type conversion) where its correctness depends on filtered data (for example, a char table column is converted to int, but only a subset of values contain a valid int representation, and this subset is identified by the filter predicate), then the query may fail with a data conversion error that resembles one of the following:
Msg 245, Level 16, State 1, Line 20
Conversion failed when converting the varchar value '0.5' to data type int.

Msg 8114, Level 16, State 5, Line 34
Error converting data type varchar to bigint.

Resolution


This issue is fixed in the following cumulative update for SQL Server:

       Cumulative Update 2 for SQL Server 2016 SP1

Note You must enable query optimizer hotfixes in order for this fix to take effect.

You can enable the query optimizer hotfixes by using one of the following options: trace flag 4199, Database Scoped Configuration setting QUERY_OPTIMIZER_HOTFIXES=ON (available in SQL Server 2016 and later), or USE_HINT query option 'ENABLE_QUERY_OPTIMIZER_HOTFIXES' (available in SQL Server 2016 SP1 and later).

 

Status


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

References


Learn about the terminology that Microsoft uses to describe software updates.