KB4054398 - CORRECTIF : l’assertion de vente au détail « Comparaison non valide en raison de NO COLLATION » se produit dans SQL Server 2014, 2016 et 2017

S’applique à
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2017 Standard on Windows SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2016 Service Pack 1 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

Symptômes

Supposons que vous ayez une requête qui effectue certaines opérations de chaîne, par exemple, la concaténation, sur les colonnes CHAR ou VARCHAR dans Microsoft SQL Server 2014, 2016 et 2017. Prenons le scénario suivant :

  • Vous concatènez des colonnes avec différents classements qui leur sont affectés.
  • Ces classements sont incompatibles les uns avec les autres. Par exemple, vous essayez de concaténer une colonne qui est rassemblée comme Latin1_General_CI_AI avec Latin1_General_BIN.
  • Le résultat final de la concaténation est affecté à un classement spécifique (y compris « database_default ») en raison de la résolution du conflit de classement.

Dans ce scénario, SQL Server peut retourner une déclaration de vente au détail indiquant « Comparaison non valide en raison de NO COLLATION », et vous pouvez recevoir des messages d’erreur qui ressemblent à ce qui suit :

Remarque

  • Emplacement : typinfo.cpp :Numéro_ligne
    Expression : false
    SPID : SPID
    ID de processus : ProcessID
    Description : comparaison non valide en raison de NO COLLATION.

  • Msg 3624, Niveau 20, État 1, LineNumber
    Une case activée d’assertion système a échoué. Pour plus d’informations, consultez le journal des erreurs SQL Server. En règle générale, un échec d’assertion est dû à un bogue logiciel ou à une altération des données. Pour case activée d’altération de la base de données, envisagez d’exécuter DBCC CHECKDB. Si vous avez accepté d’envoyer des vidages à Microsoft pendant l’installation, un mini-vidage est envoyé à Microsoft. Une mise à jour peut être disponible auprès de Microsoft dans le dernier Service Pack ou dans un correctif logiciel du support technique.

  • Msg 596, Niveau 21, État 1, Line LineNumber
    Impossible de poursuivre l’exécution, car la session est dans l’état kill.

  • Msg 0, Niveau 20, État 0, Line LineNumber

  • Une erreur grave s’est produite sur la commande actuelle.  Les résultats, le cas échéant, doivent être ignorés.

Cause

Pendant l’étape d’optimisation de la requête, SQL Server tente de calculer des cardinalités sur les résultats intermédiaires de différentes phases de la requête, par exemple la concaténation. Étant donné que la résolution des conflits de classement a lieu à la toute fin, l’optimiseur de requête peut l’ignorer et tente d’effectuer le calcul de la cardinalité de concaténation sur une entrée avec un classement en conflit.

Résolution

Ce problème est résolu dans les mises à jour cumulatives suivantes pour SQL Server :

Mise à jour cumulative 8 pour SQL Server 2016 SP1

Mise à jour cumulative 4 pour SQL Server 2017

Mise à jour cumulative 9 pour SQL Server 2014 SP2

À propos des mises à jour cumulatives pour SQL Server :

Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels et tous les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :

Dernière mise à jour cumulative pour SQL Server 2016

Dernière mise à jour cumulative pour SQL Server 2017

Dernière mise à jour cumulative pour SQL Server 2014

État

Microsoft a confirmé qu’il s’agissait d’un problème dans les produits Microsoft répertoriés dans la section « S’applique à ».

Références

En savoir plus à propos de la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.