KB2589980-FIX : résultats incorrects ou violation de contrainte lorsque vous exécutez une instruction SELECT ou DML qui utilise la fonction row_number et un plan d’exécution parallèle dans SQL Server 2008

S’applique à : SQL Server 2008

Microsoft distribue les correctifs Microsoft SQL Server 2008 sous la forme d’un fichier téléchargeable. Dans la mesure où les correctifs sont cumulatifs, chaque nouvelle version contient tous les correctifs et les correctifs de sécurité inclus dans la version précédente du correctif SQL Server 2008.

Symptômes


Prenons l’exemple du scénario suivant :
  • Vous exécutez une requête parallèle qui utilise la fonction ROW_NUMBER dans Microsoft SQL Server 2008.
  • Vous essayez d’exécuter la requête à l’aide d’une sous-requête qui se trouve à l’intérieur d’une instruction Select ou d’une instruction DML (Data Manipulation Language).
Dans ce scénario, vous rencontrez l’un des problèmes suivants :
  • Des résultats incorrects s’affichent si vous exécutez la requête à l’intérieur de l’instruction Select à plusieurs reprises.
  • Le tableau peut contenir des données incorrectes si la requête s’exécute dans une instruction DML. Si le tableau comporte des contraintes, l’instruction peut échouer en cas de violation de contrainte. Par exemple, une instruction Insert peut échouer et une erreur de violation de clé primaire se produit si la table possède une clé primaire.
Remarque Ces problèmes peuvent se produire dans l’une des situations suivantes :
  • Vous définissez l’option d’indicateur de requête MAXDOP sur une valeur supérieure à 2.
  • Vous définissez l’option niveau maximal de parallélisme sur une valeur supérieure à 2 dans Configuration du serveur.

Résolution


Pour résoudre ce problème, procurez-vous le dernier Service Pack pour SQL Server 2008. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
968382 Obtention du dernier Service Pack pour SQL Server 2008

Solution de contournement


Pour contourner ce problème, appliquez l'une des méthodes suivantes :
  • Activez l’indicateur de suivi 4134 si vous avez appliqué une des mises à jour suivantes :
    • Package de mise à jour cumulative 6 pour SQL Server 2008 ou package de mise à jour cumulative ultérieure pour SQL Server 2008
    • Package de mise à jour cumulative 2 pour SQL Server 2008 Service Pack 1 (SP1) ou un package de mise à jour cumulative ultérieure pour SQL Server 2008 SP1
    Pour plus d’informations sur l’activation des indicateurs de suivi, visitez le site Web MSDN suivant :
  • Référencez la section « solution de contournement » dans l’article 970198 de la base de connaissances Microsoft. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
    970198 CORRECTIF : vous recevez un résultat incorrect lorsque vous exécutez une requête qui utilise la fonction row_number dans SQL Server 2008