SQL server erreur de mise à jour - Msg 2627
Je suis en train de mettre à jour ma table "appel d'offres".
Il a ces colonnes:
- réquisition n(rq_no)
- réquisition de l'année(rq_year)
- numéro de l'offre(te_no)
- te_date
- te-due_date
- statut de monnaie(te_status)
- te_year
J'ai essayé le code ci-dessous:
update tender
set te_status='D'
where rq_no like 'Q052401C' AND te_year like '2012' and te_no like 'n0066'
si je place une autre caractère à la place de 'D'
dans te_status
, la mise à jour est réussie, sauf pour "D"
par exemple:
set te_status='S'
Quand je lance
SELECT * FROM TENDER
WHERE
rq_no LIKE 'Q052401C' AND te_year LIKE '2012' AND te_no LIKE 'n0066'
il renvoie une seule ligne.
Il m'indique l'erreur suivante:
Msg 2627, Niveau 14, État 1, Ligne 1
La Violation de la contrainte de CLÉ PRIMAIRE 'PK_tender'.
Impossible d'insérer une clé en double dans l'objet 'dbo.offres'.
La valeur en double est (N0066, Q052401C, D, 2012)
La déclaration a été résilié.
Est-ce que tout cela signifie?
Vous devez vous connecter pour publier un commentaire.
Cela signifie que vous avez une clé primaire sur la table qui contient les champs relatifs aux valeurs qu'elle affiche - c'est à dire (N0066, Q052401C, D, 2012) - et que si vous changez la te-champ d'état à D sur la ligne de mise à jour, alors il en résulte une clé primaire qui existe déjà.
En fonction de la DB que vous utilisez, parfois vous ne pouvez pas mettre à JOUR un champ de clé primaire - vous devriez faire une SUPPRESSION de l'ancienne ligne et une INSERTION de la ligne modifiée (avec la nouvelle clé).