CORRECTIF : L'étape de travail échoue si la première instruction INSERT génère le message d'erreur 3604

Traductions disponibles Traductions disponibles
Numéro d'article: 295032 - Voir les produits auxquels s'applique cet article
Ancien nº de publication de cet article : F295032
N° DE BOGUE : 351328 (SHILOH_BUGS)
N° DE BOGUE : 100729 (SQLBUG_70)
Agrandir tout | Réduire tout

Sommaire

Symptômes

Si un travail contient une seule instruction INSERT dans une table possédant un index unique comportant la clause IGNORE_DUP_KEY, et si l'instruction viole la propriété d'unicité de l'index, la ligne correspondante n'est pas insérée dans la table. L'étape de travail échoue et le message suivant s'affiche dans l'historique de l'étape :
La clé en double a été ignorée. [SQLSTATE 23000] (Message 3604). L'étape a échoué.
Étant donné que la table possède un INDEX UNIQUE avec IGNORE_DUP_KEY, l'instruction INSERT devrait être ignorée et l'étape devrait réussir.

Résolution

Pour résoudre ce problème, procurez-vous le dernier Service Pack de SQL Server 2000. Pour plus d'informations, consultez l'article suivant dans la Base de connaissances Microsoft :
290211 INF : Procédures pour obtenir le dernier Service Pack de SQL Server 2000

Contournement

Si vous placez une instruction SELECT " factice " qui s'exécute toujours avec succès (comme SELECT 1) juste avant l'instruction INSERT qui échoue en générant le message d'erreur 3604, l'étape réussit. Ceci est démontré dans la section " Informations supplémentaires ".

Statut

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section "Liste des produits concernés par cet article". Ce problème a été corrigé dans le Service Pack 1 pour SQL Server 2000.

Plus d'informations

Procédure pour reproduire le comportement

  1. Créez une table test dans la base de données pubs et exécutez le script suivant pour insérer une ligne :
    USE pubs
    CREATE TABLE test(i int)
    CREATE UNIQUE INDEX uniq_t1_i on test(i) with IGNORE_DUP_KEY
    INSERT INTO test VALUES(1)
  2. Créez un travail T-SQL dans la base de données pubs pour insérer une ligne dans la table test :
    INSERT INTO pubs..test values(1)
  3. Exécutez le travail. Le travail échoue et l'historique de l'étape indique l'erreur répertoriées dans la section " Symptômes ".
  4. Notez que si vous ajoutez une instruction réussie après l'instruction INSERT qui a généré le message d'erreur 3604 :
    INSERT INTO pubs..test values(1)
    INSERT INTO pubs..test values(2)
    l'étape échoue de nouveau avec l'erreur suivante :
    La clé en double a été ignorée. [SQLSTATE 23000] (Message 3604) L'instruction associée n'est pas préparée [SQLSTATE HY007] (Erreur 0). L'étape a échoué.
  5. l'étape échoue de nouveau avec l'erreur suivante : Toutefois, si vous ajoutez une instruction réussie (qui obtient les résultats) avant l'instruction INSERT qui a provoqué le message d'erreur 3604 :
    insert pubs..t1 values(3)
    insert pubs..t1 values(1)
    l'étape réussit et le message suivant s'affiche :
    La clé en double a été ignorée. [SQLSTATE 23000] (Message 3604). L'étape a réussi.

Propriétés

Numéro d'article: 295032 - Dernière mise à jour: lundi 16 février 2004 - Version: 4.1
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 7.0 Standard
  • Microsoft SQL Server 2000 Standard
Mots-clés : 
kbbug kbfix kbsqlserv2000bug kbsqlserv2000sp1fix KB295032
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