Symptômes
Supposons que vous avez une requête qui effectue certaines opérations de chaîne, par exemple, la concaténation, sur des 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 assemblée en tant que 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 ») dans le cadre de la résolution du conflit de classement.
Dans ce scénario, SQL Server peut renvoyer une assertion de vente au détail indiquant « Comparaison non valide en raison de l’absence de classement », et des messages d’erreur semblables au suivant peuvent s’afficher :
Remarque
Emplacement : typinfo.cpp :LineNumber
Expression : false
SPID : SPID
ID processus : ProcessID
Description : comparaison non valide en raison de l’absence de classement.Msg 3624, Niveau 20, État 1, Ligne LineNumber
Une case activée d’assertion système a échoué. Pour plus d’informations, consultez le journal des erreurs de SQL Server. En règle générale, un échec d’assertion est causé par un bogue logiciel ou une altération des données. Pour vérifier la case activée pour la base de données endommagée, envisagez d’exécuter DBCC CHECKDB. Si vous avez accepté d’envoyer des vidages à Microsoft pendant l’installation, un mini-vidage sera envoyé à Microsoft. Une mise à jour peut être disponible auprès de Microsoft dans le dernier Service Pack ou dans un correctif du Support technique.Msg 596, Niveau 21, État 1, Ligne LineNumber
Impossible de continuer l’exécution car la session est à l’état d’arrêt.Msg 0, Niveau 20, État 0, Ligne LineNumber
Une grave erreur s’est produite sur la commande actuelle. Les résultats, s’il y en a, doivent être ignorés.
Cause
Au cours de l’étape d’optimisation de la requête, SQL Server essaie de calculer les cardinalités sur les résultats intermédiaires des différentes étapes de la requête, par exemple, la concaténation. Étant donné que la résolution du conflit de classement a lieu à la toute fin, l’optimiseur de requête peut ne pas en être conscient et essayer 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 CU 38 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.