CORRECTIF : Message d'erreur « Tentative de définir la valeur d'une colonne non-NULL-capable de NULL » lorsque vous exécutez une requête qui utilise la fonction ISNULL() pour sélectionner des valeurs d'une colonne nullable...

Traductions disponibles Traductions disponibles
Numéro d'article: 981037 - Voir les produits auxquels s'applique cet article
Microsoft distribue les correctifs de Microsoft SQL Server 2008 comme un fichier téléchargeable. Les correctifs étant cumulatifs, chaque nouvelle version contient tous les correctifs logiciels et des correctifs de sécurité inclus dans la précédente 2008 de SQL Server version du correctif.
Agrandir tout | Réduire tout

Symptômes

Envisagez le scénario suivant :
  • Dans Microsoft SQL Server 2008, vous exécutez une requête qui utilise la ISNULL() fonction permettant de sélectionner des valeurs dans une colonne nullable.
  • La table qui contient la colonne nullable est jointe à une autre table à la colonne nullable.
  • Le plan de requête qui est créé par l'optimiseur de requête utilise une jointure de hachage, une bobine ou une table de tri ci-dessous le JOINTURE opérateur.
Dans ce scénario, le message d'erreur suivant s'affiche :
Msg 681, niveau 16, état 3, ligne 2
Tentative de définir la valeur d'une colonne non-NULL-capable de NULL.

Cause

Optimiseur de requêtes détermine que la colonne référencée dans la fonction ISNULL() est non nullable, car l'opérateur de jointure rejette les valeurs NULL. Puis, dans le plan de requête, optimiseur exécute un push de l'expression qui se trouve dans la fonction ISNULL() sous l'opérateur de jointure . En outre, la valeur de l'expression peut être NULL. Toutefois, optimiseur de requêtes ne ré-dérive pas la propriété de possibilité de valeur null de l'expression. Puis, dans le plan de requête, une table de travail est utilisée pour mettre en ?uvre la jointure par hachage, la bobine ou la table de tri qui inclut l'expression. En outre, la colonne correspondante dans la table de travail est déclarée comme non nullable. Lorsque le moteur de requête SQL Server essaie d'insérer des valeurs NULL dans la table de travail, l'erreur se produit.

Résolution

Le correctif de ce problème a été publié dans mise à jour Cumulative 7 pour SQL Server 2008 Service Pack 1. Pour plus d'informations sur ce package de mise à jour cumulative, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
979065 Package de mise à jour cumulative 7 pour SQL Server 2008 Service Pack 1
Remarque : Les versions étant cumulatives, chaque nouvelle version de correctif contient tous les correctifs logiciels et des correctifs de sécurité inclus dans la précédente 2008 de SQL Server version du correctif. Nous vous recommandons l'application la plus récente version du correctif qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
970365 Le 2008 de SQL Server versions publiées après SQL Server 2008 Service Pack 1
Correctifs Microsoft SQL Server 2008 sont créés pour SQL Server service packs spécifiques. Vous devez appliquer un correctif SQL Server 2008 Service Pack 1 dans une installation de SQL Server 2008 Service Pack 1. Par défaut, tout correctif qui est fourni dans un service pack de SQL Server est inclus dans le prochain service pack de SQL Server.

Contournement

Pour contourner ce problème, appliquez l'une des méthodes suivantes.

Méthode 1

Supprimer la fonction ISNULL() de la requête.

Remarque Étant donné que la colonne qui se trouve dans cette fonction provient de l'opérateur JOIN qui rejette les valeurs NULL, la fonction ISNULL() est redondante.

Méthode 2

Réécrivez la requête afin que le plan de requête n'utilise pas une jointure par hachage, une bobine ou une table de tri. Par exemple, si votre requête contient une clause ORDER BY, créer un index ordonné en clusters ou recouvrement qui fournit le classement requis et inclut toutes les colonnes requises. Lorsque vous utilisez cette méthode, l'optimiseur de requêtes n'utilise pas une table de tri.

Statut

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

Références

Pour plus d'informations sur le modèle de service incrémentiel pour SQL Server, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
935897 Un modèle de service incrémentiel est disponible auprès de l'équipe SQL Server pour proposer des correctifs pour les problèmes signalés


Pour plus d'informations sur le schéma d'appellation des mises à jour de SQL Server, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
822499Nouveau schéma d'affectation de noms pour les packages de mise à jour logicielle de Microsoft SQL Server


Pour plus d'informations sur la terminologie de mise à jour de logiciels, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
824684 5 Description de la terminologie standard utilisée pour définir les mises à jour logicielles de Microsoft

Propriétés

Numéro d'article: 981037 - Dernière mise à jour: samedi 8 février 2014 - Version: 2.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Workgroup
Mots-clés : 
kbHotfixServer kbexpertiseadvanced kbsurveynew kbqfe kbfix kbmt KB981037 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu d'une traduction automatique réalisée par un logiciel Microsoft et non par un traducteur professionnel. Cette traduction automatique a pu aussi être révisée par la communauté Microsoft grâce à la technologie Community Translation Framework (CTF). Pour en savoir plus sur cette technologie, veuillez consulter la page http://support.microsoft.com/gp/machine-translation-corrections/fr. Microsoft vous propose en effet des articles traduits par des professionnels, des articles issus de traductions automatiques et des articles issus de traductions automatiques révisées par la communauté Microsoft, de manière à ce que vous ayez accès à tous les articles de notre Base de connaissances dans votre langue. Il est important de noter que les articles issus de la traduction automatique, y compris ceux révisés par la communauté Microsoft, peuvent contenir des erreurs de vocabulaire, de syntaxe ou de grammaire. Microsoft ne pourra être tenu responsable des imprécisions, erreurs, ainsi que de tout dommage résultant d?une traduction incorrecte du contenu ou de son utilisation par les clients.
La version anglaise de cet article est la suivante: 981037
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com