Ajout de contrainte dans une table déjà créée [Fermé]

Signaler
-
 cfg123 -
Bonjour,

Je suis nouveau en SQL SERVER et j'ai besoin d'aide
En effet, après avoir créer mes tables
[dbo].[ItemsItemDetails]
avec ce code: CREATE TABLE ItemsItemDetails (
ItemID INT PRIMARY KEY ( ItemID ) IDENTITY (1,1),
ItemName VARCHAR (50),
ItemDescription VARCHAR (200) NOT NULL,
QuantityInHand INT CHECK ( QuantityInHand > 0 ) ,
UnitPrice MONEY CHECK ( UnitPrice > 0 ),
ReorderQuantity INT CHECK ( ReorderQuantity > 0 ),
ReorderLevel AS (QuantityInHand - ReorderQuantity )
)
et
[dbo].[SupplierSupplierDetails] avec ce code: CREATE TABLE SupplierSupplierDetails(
SupplierID INT PRIMARY KEY ( SupplierID ) IDENTITY(1,1),
FirstName VARCHAR (30),
LastName VARCHAR (30),
Address VARCHAR (200),
Country VARCHAR (30),
Phone CHAR(12) NOT NULL CHECK ( Phone LIKE '[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9]')
)
Maintenant je voudrais ajouter la contrainte avec ce code
alter table ItemsItemDetails
add constraint pk_SupplierID
foreign key references SupplierSupplierDetails(SupplierID);
Et je reçois ce message d'erreur
Msg 8139, Niveau 16, État 0, Ligne 1
Le nombre de colonnes de référence dans la clé étrangère diffère du nombre de colonnes référencées, table 'ItemsItemDetails'.

1 réponse

Messages postés
1458
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
18 août 2020
109
La contrainte ne peut étre ajouter car les données présentent dans les tables ne permette pas de valider celle ci.

(en gros tu as des entrées qui ne respectent pas la contrainte que tu souhaites ajouter)

A plus
Messages postés
1458
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
18 août 2020
109
Ok, a priori, tu veux que cette clé commune, SupplierSupplierDetails(SupplierID);, soit dans les deux tables. Right ?
Ou est stocké le "SupplierID" dans ta table `ItemsItemDetails`

Jette un coup d'oeil au cours ;) https://openclassrooms.com/fr/courses/1959476-administrez-vos-bases-de-donnees-avec-mysql/1963057-cles-primaires-et-etrangeres#/id/r-1962969
Messages postés
7
Date d'inscription
vendredi 25 mai 2018
Statut
Membre
Dernière intervention
28 mai 2018

oui c'est ça
SupplierID est dans la table 'SupplierDetails' et je souhaite maintenant l'avoir dans la table 'ItemsItemDetails' comme clé étrangère.
Messages postés
1458
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
18 août 2020
109
Tu ne comprends pas le principe de la clé étrangére. Relis stp :
https://openclassrooms.com/fr/courses/1959476-administrez-vos-bases-de-donnees-avec-mysql/1963057-cles-primaires-et-etrangeres#/id/r-1962969

Et creer un nouveau champs dans ta table `ItemsItemDetails` tu l'appelles comme_tu_veux
puis tu ajoutes ta contrainte :
ALTER TABLE `ItemsItemDetails`
ADD CONSTRAINT `pk_SupplierID`
FOREIGN KEY (comme_tu_veux) REFERENCES SupplierSupplierDetails(SupplierID);
Messages postés
7
Date d'inscription
vendredi 25 mai 2018
Statut
Membre
Dernière intervention
28 mai 2018

Merci c'est gentil
Je vais lire et revenir
Bonsoir
grâce au lien j'ai pu me sortir d'affaire même si j'ai encore un peu de difficulté avec les rajouts mais une relecture je pense me fera mieux comprendre.
Mes chaleureux remerciements ...