Si vous n'avez pas réussi à insérer un nouvel enregistrement dans une table à cause de la contrainte d'unicité, ne manquez pas de lire cet article. Il vous aidera à résoudre ce problème.
Dans cet article, nous présenterons 4 méthodes pour résoudre le problème lorsque vous ne parvenez pas à insérer un nouvel enregistrement car il viole la contrainte unique de la table dans SQL Server.
Un vrai cas :
Voyons maintenant un cas réel. Nous avons une base de données nommée "Produit" et il y a une table appelée "DataNumenProduit » dans la base de données. Il y a deux champs dans la table, c'est-à-dire « ProductId » et « ProductName », avec respectivement les types de données « int » et « varchar ». Et "ProductId" est une clé primaire avec une contrainte unique.
Actuellement, il y a quelques enregistrements dans le tableau, comme ci-dessous :
Figure 1 Enregistrements dans le tableau "DataNumenProduit"
En supposant qu'il existe deux DBA pour la base de données, c'est-à-dire Jim et Tom. Un jour, Jim a supprimé le premier enregistrement du tableau, comme ci-dessous :
DELETE FROM DataNumenProduct WHERE ProductId=1;
Le deuxième jour, Tom a inséré un nouvel enregistrement dans la table, qui a la même clé primaire avec l'enregistrement supprimé, comme ci-dessous :
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Notre table contient donc les enregistrements suivants, comme ci-dessous :
Figure 2 Enregistrements mis à jour dans le tableau "DataNumenDes produits"
Maintenant, si Jim veut restaurer l'enregistrement supprimé dans la table, il violera la contrainte unique de la clé primaire "ProductId". Dans un tel cas, nous pouvons utiliser l'une des solutions de contournement ci-dessous pour résoudre le problème.
Solution 1 : Modifier la clé primaire du nouvel enregistrement pour éviter les conflits
Nous pouvons modifier la clé primaire de l'enregistrement à insérer en une nouvelle valeur différente de celles de tous les enregistrements existants dans la table. Prenons le cas ci-dessus comme exemple, pour l'enregistrement à insérer, nous pouvons modifier la valeur de la clé primaire de 1 à 5. Ensuite, nous pouvons restaurer le nouvel enregistrement généré dans la table, comme ci-dessous :
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Vous trouverez ci-dessous les enregistrements finaux du tableau :
Figure 3 Dossiers finaux dans le tableau "DataNumen Des produits"
Solution de contournement 2 : modifier la clé primaire de l'enregistrement existant pour éviter les conflits
- Tout d'abord, nous devons mettre à jour la valeur de la clé primaire de l'enregistrement existant, ce qui peut provoquer un conflit, comme ci-dessous :
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Vous trouverez ci-dessous les enregistrements mis à jour dans le tableau :
Figure 4 Enregistrements mis à jour dans le tableau "DataNumen Des produits"
- Ensuite, nous pouvons restaurer l'enregistrement supprimé dans la table, comme ci-dessous :
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Voyons maintenant la version finale, comme ci-dessous :
Figure 5 Dossiers finaux dans le tableau "DataNumen Des produits"
Solution de contournement 3 : Désactiver temporairement la contrainte d’unicité via SQL
- Pour résoudre ce problème, nous pouvons supprimer temporairement la contrainte de clé primaire « pk » dans la table, comme ci-dessous :
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Ensuite, nous pouvons rajouter l'enregistrement supprimé à la table, comme ci-dessous :
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Voyons maintenant les enregistrements de la table :
Figure 6 Enregistrements mis à jour dans le tableau "DataNumen Des produits"
- Ensuite, comme deux enregistrements ont les mêmes valeurs de clé primaire, nous devons modifier l'un d'entre eux pour éviter les conflits, comme ci-dessous :
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Enfin, nous rajoutons la contrainte de clé primaire "pk" au tableau, comme ci-dessous :
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Il y a maintenant quelques enregistrements dans le tableau, comme ci-dessous :
Figure 7 Contenu mis à jour dans le tableau "DataNumen Des produits"
Solution de contournement 4 : Désactiver temporairement la contrainte d’unicité via SQL Server Atelier de gestion :
- En premier lieu, nous supprimons la contrainte de clé primaire "pk" dans le tableau via l'interface graphique, comme ci-dessous :
Figure 8 Supprimer la contrainte de clé primaire "pk" via l'interface graphique
- Ensuite, nous insérons l'enregistrement supprimé en cas réel dans le tableau, comme ci-dessous.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Il y a maintenant quelques enregistrements dans le tableau, comme ci-dessous :
Figure 9 Contenu mis à jour dans le tableau "DataNumen Des produits"
- Ensuite, nous modifions la valeur de la clé primaire de l'enregistrement existant dans la table, comme ci-dessous :
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Enfin, nous rajoutons la contrainte de clé primaire "pk" à la table via l'interface graphique, comme ci-dessous :
Figure 8 Rajouter la contrainte de clé primaire "pk" via l'interface graphique
Nous résolvons SQL Server Corruption de la base de données
En dehors des contraintes uniques, SQL Server la corruption est également un problème très courant ennuyeux DBAs. Normalement, nous pouvons utiliser SQL Server commandes intégrées pour résoudre les corruptions. Cependant, s'ils ne fonctionnent pas, nous pouvons recourir à des tiers SQL Server outils de récupération de données.
Introduction de l'auteur:
Jim Hu est un expert en récupération de données dans DataNumen, Inc., qui est le leader mondial des technologies de récupération de données, y compris Réparation d'accès et dbf réparer les produits logiciels. Pour plus d'informations, visitez www.datanumen.com








