Síntomas
Suponga que tiene una consulta que realiza algunas operaciones de cadena, por ejemplo, concatenación, en columnas CHAR o VARCHAR en Microsoft SQL Server 2014, 2016 y 2017. Imagine la siguiente situación:
-
Concatena las columnas con diferentes intercalaciones que se les asignan.
-
Esas intercalaciones son incompatibles entre sí. Por ejemplo, intenta concatenar una columna que se intercala como Latin1_General_CI_AI con Latin1_General_BIN.
-
El resultado final de la concatenación se asigna a una intercalación específica (incluyendo "database_default") como cuestión de la resolución de conflictos de intercalación.
En este escenario, SQL Server puede devolver una aserción de venta al por menor que indica "comparación no válida debido a ninguna intercalación", y puede recibir algunos mensajes de error similares a los siguientes:
Ubicación: typinfo. cpp:lineNumber Expresión: falso SPID: SPID ID. de proceso: ProcessId Descripción: comparación no válida porque NO hay intercalación.
Msj 3624, nivel 20, estado 1, línea lineNumber Se produjo un error en una comprobación de aserción del sistema. Compruebe el registro de errores de SQL Server para ver los detalles. Por lo general, el error de aserción se debe a un error de software o a daños en los datos. Para comprobar si hay daños en la base de datos, considere la posibilidad de ejecutar DBCC CHECKDB. Si aceptó el envío de volcados a Microsoft durante la instalación, se enviará un minivolcado a Microsoft. Es posible que Microsoft disponga de una actualización en el último Service Pack o en un hotfix del soporte técnico.
Msj 596, nivel 21, estado 1, línea lineNumber No se puede continuar con la ejecución porque la sesión está en el estado de eliminación.
Mensaje 0, nivel 20, estado 0, línea lineNumber
Se ha producido un error grave en el comando actual. Los resultados, si los hay, se deben descartar.
Causa
Durante la optimización de la consulta, SQL Server intenta calcular cardinales en resultados intermedios de diversas fases de la consulta, por ejemplo, la concatenación. Dado que la resolución de conflictos de intercalación tiene lugar al final, el optimizador de consultas puede no ser consciente de ello e intenta realizar el cálculo de la cardinalidad de la concatenación en una entrada con intercalación contradictoria.
Resolución
Este problema se ha corregido en las siguientes actualizaciones acumulativas para SQL Server:
Actualización acumulativa 8 para SQL Server 2016 SP1
Cada actualización acumulativa para SQL Server contiene todas las revisiones y todas las revisiones de seguridad incluidas en la actualización acumulativa anterior. Consulte las últimas actualizaciones acumulativas para SQL Server:
Actualización acumulativa más reciente de SQL Server 2016
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "Se aplica a".
Referencias
Obtenga más información sobre la terminologíaque Microsoft usa para describir las actualizaciones de software.