CORRECTIF : Message d'erreur dans SQL Server 2008 lorsque vous exécutez une instruction INSERT SELECT sur une table: «violation de contrainte PRIMARY KEY '<primarykey>'. Impossible d'insérer clé en double dans l'objet '<tablename>' "

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

Sommaire

Symptômes

Envisagez le scénario suivant :
  • Vous avez installé sur un ordinateur multiprocesseur Microsoft SQL Server 2008.
  • Vous disposez d'une instruction INSERT SELECT sur une table qui contient une clé primaire.

    Remarque Dans l'instruction INSERT SELECT , la table qui reçoit les données est la même table exporte les données. Par exemple :
    INSERT T1 ? SELECT T1
  • Vous référencez les autres tables dans cette instruction INSERT SELECT . Ces références incluent une table temporaire.

    Remarque Les tables sont référencées dans la clause FROM ou les tables sont référencées dans une condition de sous-requête ou une jointure.
Lorsque vous exécutez l'instruction, vous recevez message d'erreur suivantes :

Msg 2627, niveau 14, état 1
Violation de contrainte PRIMARY KEY ' PrimaryKey '. Impossible d'insérer clé en double dans l'objet ' TableName '.

Si vous examinez le plan d'exécution, vous constatez que l'opérateur de jointure et l'opérateur Eager Spool s'exécuter en parallèle. Cet opérateur Eager Spool se trouve sous l'opérateur JOIN . En outre, la table qui reçoit les données dans l'instruction est la table interne de la jointure.

Remarque Ce problème se produit également lorsque vous exécutez l'instruction UPDATE SELECT ou l'instruction DELETE SELECT .

Cause

Ce problème se produit en raison d'un bogue dans la file d'attente pour l'opérateur Eager Spool où la file d'attente génère plus de lignes que prévu. Ce comportement provoque un problème de clé en double.

Résolution

Informations de cumulatif de mise à jour

Le correctif de ce problème a été publié tout d'abord en mise à jour cumulative 3 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 :
971491Lot mises à jour cumulatives 3 pour SQL Server 2008 Service Pack 1
Remarque Les versions étant cumulatives, chaque nouvelle version de correctif contient tous les correctifs et tous les correctifs de sécurité inclus avec la précédente SQL Server 2008 version du correctif. Microsoft vous recommande d'envisager appliquer la dernière version de 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 :
970365Versions de SQL Server 2008 publiées après SQL Server 2008 Service Pack 1
Microsoft SQL Server 2008 les correctifs sont créés pour service packs SQL Server spécifiques. Vous devez appliquer un correctif SQL Server 2008 Service Pack 1 à une installation de SQL Server 2008 Service Pack 1. Par défaut, aucun correctif fourni dans un service pack SQL Server est inclus dans le prochain service pack SQL Server.

Informations sur le correctif

Un correctif pris en charge est désormais disponible auprès de Microsoft. Toutefois, il est conçu pour corriger le problème décrit dans cet article. Il s'appliquent uniquement aux systèmes qui rencontrent ce problème spécifique. Ce correctif peut être soumise autres tests. Par conséquent, si vous n'êtes pas sérieusement concerné par ce problème, nous vous recommandons d'attendre le prochain service pack SQL Server 2008 qui comprendra ce correctif.

Pour résoudre ce problème immédiatement, contactez le support technique Microsoft pour obtenir le correctif. Pour obtenir une liste complète des numéros de téléphone des services de support technique Microsoft et des informations sur les coûts de support technique, site Web Microsoft suivant :
http://support.microsoft.com/contactus/?ws=support
Remarque Dans certains cas, aucuns normalement des appels de support seront facturés si un technicien du support technique Microsoft détermine qu'une mise à jour spécifique peut résoudre votre problème. Les coûts habituels du support technique s'appliqueront aux autres questions et problèmes qui ne relèvent pas de la mise à jour spécifique en question.

Conditions préalables

Pour appliquer ce correctif, vous devez disposer d'un ordinateur qui exécute SQL Server 2008 Service Pack 1 (SP1).

Redémarrez informations

Vous ne devez pas redémarrer l'ordinateur après avoir appliqué ce correctif.

Informations du Registre

Vous ne devrez pas modifier le Registre.

Informations sur le fichier du correctif

Ce correctif contient uniquement les fichiers requis pour résoudre les problèmes répertoriés dans cet article. Ce correctif ne doit contenir tous les fichiers nécessaires à entièrement mise à jour un produit vers la dernière version.

La version anglaise de ce correctif dispose les attributs de fichier (ou version ultérieure fichier) répertoriés dans le tableau suivant. Les dates et heures de ces fichiers figurent en temps universel (UTC). Lorsque vous affichez les informations du fichier, il est converti en heure locale. Pour connaître la différence entre l'UTC et l'heure locale, utilisez l'onglet fuseau horaire de l'élément date et heure dans le Panneau de configuration.
Pour toutes les versions 86 du moteur de base de données SQL Server 2008 x
Réduire ce tableauAgrandir ce tableau
Nom de fichierVersion du fichierTaille du fichierDateHeurePlate-forme
Sqlaccess.dll2007.100.2712.0405,35213-Mai-200917 : 53x 86
Keyfile.dll2007.100.2712.013,65613-Mai-200915 : 37x 86
Sqlservr.exe2007.100.2712.042,729,32013-Mai-200917 : 56x 86
Pour toutes les x versions 86 de SQL Server 2008 Analysis Services
Réduire ce tableauAgrandir ce tableau
Nom de fichierVersion du fichierTaille du fichierDateHeurePlate-forme
Msmdlocal.dll10.0.2712.023,461,72013-Mai-200916 : 08x 86
733 Msmdsrv.exe10.0.2712.021,955,41613-Mai-200916 : 09x 86
Keyfile.dll2007.100.2712.013,65613-Mai-200915 : 37x 86
Msmdpump.dll10.0.2712.06,180,69613-Mai-200916 : 08x 86
Msmdspdm.dll10.0.2712.0178,00813-Mai-200916 : 08x 86
Msmgdsrv.dll10.0.2712.08,558,93613-Mai-200916 : 09x 86
Msolap100.dll10.0.2712.06,532,95213-Mai-200916 : 09x 86
Pour toutes les versions 64 du moteur de base de données SQL Server 2008 x
Réduire ce tableauAgrandir ce tableau
Nom de fichierVersion du fichierTaille du fichierDateHeurePlate-forme
Sqlaccess.dll2007.100.2712.0412,00814-Mai-200901 : 15x 86
Keyfile.dll2007.100.2712.014,18413-Mai-200923 : 55x 64
Sqlservr.exe2007.100.2712.057,873,25614-Mai-200901 : 17x 64
Pour toutes les 64 versions x de SQL Server 2008 Analysis Services
Réduire ce tableauAgrandir ce tableau
Nom de fichierVersion du fichierTaille du fichierDateHeurePlate-forme
Msmdlocal.dll10.0.2712.023,461,72013-Mai-200916 : 08x 86
Msmdlocal.dll10.0.2712.044,436,82414-Mai-200900 : 10x 64
733 Msmdsrv.exe10.0.2712.043,713,36814-Mai-200900 : 10x 64
Keyfile.dll2007.100.2712.014,18413-Mai-200923 : 55x 64
Msmdpump.dll10.0.2712.07,430,48814-Mai-200900 : 10x 64
Msmdspdm.dll10.0.2712.0178,02414-Mai-200900 : 10x 86
Msmgdsrv.dll10.0.2712.08,558,93613-Mai-200916 : 09x 86
Msmgdsrv.dll10.0.2712.012,332,37614-Mai-200900 : 11x 64
Msolap100.dll10.0.2712.06,532,95213-Mai-200916 : 09x 86
Msolap100.dll10.0.2712.08,153,94414-Mai-200900 : 11x 64
Pour toutes les versions Itanium du moteur de base de données SQL Server 2008 prises en charge
Réduire ce tableauAgrandir ce tableau
Nom de fichierVersion du fichierTaille du fichierDateHeurePlate-forme
Sqlaccess.dll2007.100.2712.0398,69613-Mai-200917 : 01x 86
Keyfile.dll2007.100.2712.019,30413-Mai-200915 : 26IA-64
Sqlservr.exe2007.100.2712.0111,042,40813-Mai-200917 : 08IA-64
Pour toutes les versions Itanium de SQL Server 2008 Analysis Services prises en charge
Réduire ce tableauAgrandir ce tableau
Nom de fichierVersion du fichierTaille du fichierDateHeurePlate-forme
Msmdlocal.dll10.0.2712.023,461,72013-Mai-200916 : 08x 86
Msmdlocal.dll10.0.2712.057,508,18413-Mai-200915 : 44IA-64
733 Msmdsrv.exe10.0.2712.058,860,88813-Mai-200915 : 46IA-64
Keyfile.dll2007.100.2712.019,30413-Mai-200915 : 26IA-64
Msmdpump.dll10.0.2712.08,943,44813-Mai-200915 : 45IA-64
Msmdspdm.dll10.0.2712.0178,00813-Mai-200915 : 45x 86
Msmgdsrv.dll10.0.2712.015,485,80013-Mai-200915 : 47IA-64
Msmgdsrv.dll10.0.2712.08,558,93613-Mai-200916 : 09x 86
Msolap100.dll10.0.2712.010,065,24013-Mai-200915 : 47IA-64
Msolap100.dll10.0.2712.06,532,95213-Mai-200916 : 09x 86

Contournement

Pour contourner ce problème, définissez l'indicateur de requête MAXDOP ou l'option MAXDOP à 1 au niveau de l'instruction ou au niveau du serveur.

Remarque Niveau du serveur option MAXDOP affecte les performances de toutes les requêtes qui s'exécutent sur le serveur.

Statut

Microsoft a confirmé le que de ce problème dans 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 :
935897Un modèle incrémentiel Servicing Model est disponible à partir de l'équipe SQL Server pour fournir des correctifs pour les problèmes signalés


Pour plus d'informations sur le schéma d'appellation des mises à jour 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 correctifs Microsoft SQL Server


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

Propriétés

Numéro d'article: 970507 - Dernière mise à jour: vendredi 24 juillet 2009 - 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 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Workgroup
Mots-clés : 
kbmt kbsurveynew kbfix kbqfe kbexpertiseadvanced kbhotfixserver KB970507 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 970507
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