Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/05/2011, 19h33   #1
Invité de passage
 
Lamia
Inscription : janvier 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Lamia

Informations forums :
Inscription : janvier 2011
Messages : 10
Points : 1
Points : 1
Par défaut Déclarer une clé étrangère sous SQL server 2005

Bonsoir à tous , je veux déclarer une clé étagère sous SQL server 2005 mais j'ai un souci , en fait cette FK est récurrente dans 3 tables , j'ai réussi à créer la première table mais dans la seconde j'ai ce message

Msg 2714, Level 16, State 4, Line 2
There is already an object named 'Id_communes' in the database.
Msg 1750, Level 16, State 0, Line 2
Could not create constraint. See previous errors.


sachant que j'utilise ce code

constraint Id_communes foreign key (Id_communes) references communes(Id_communes),

communes étant une table que j'ai crée et dont la PK est Id_communes , alors en créant ma seconde table dans laquelle Id_communes est une FK , ça passe mais dans la nouvelle table , j'obtiens le message d’erreur,que j'ai cité plus haut , merci d'avance pour votre aide .
mia06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 19h58   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
en fait cette FK est récurrente dans 3 tables
Ceci n'a pas de sens, la FK est différente pour chaque table puisqu'elle est précisemment sur trois tables différentes
Citation:
There is already an object named 'Id_communes' in the database.
C'est simple, une contrainte FOREIGN KEY doit avoir un nom unique sur ta base...

En général on la nomme quelques chose comme: FK_NOMTABLEFILLE_NOMTABLE_MERE
Ce qui t'assure d'avoir un nom unique sur ta base...


En clair il te suffit de nommer différemment tes trois FK...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 22h18   #3
Invité de passage
 
Lamia
Inscription : janvier 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Lamia

Informations forums :
Inscription : janvier 2011
Messages : 10
Points : 1
Points : 1
Citation:
Envoyé par mia06 Voir le message
Bonsoir à tous , je veux déclarer une clé étagère sous SQL server 2005 mais j'ai un souci , en fait cette FK est récurrente dans 3 tables , j'ai réussi à créer la première table mais dans la seconde j'ai ce message

Msg 2714, Level 16, State 4, Line 2
There is already an object named 'Id_communes' in the database.
Msg 1750, Level 16, State 0, Line 2
Could not create constraint. See previous errors.


sachant que j'utilise ce code

constraint Id_communes foreign key (Id_communes) references communes(Id_communes),

communes étant une table que j'ai crée et dont la PK est Id_communes , alors en créant ma seconde table dans laquelle Id_communes est une FK , ça passe mais dans la nouvelle table , j'obtiens le message d’erreur,que j'ai cité plus haut , merci d'avance pour votre aide .
Citation:
Envoyé par iberserk Voir le message
Ceci n'a pas de sens, la FK est différente pour chaque table puisqu'elle est précisemment sur trois tables différentes


C'est simple, une contrainte FOREIGN KEY doit avoir un nom unique sur ta base...

En général on la nomme quelques chose comme: FK_NOMTABLEFILLE_NOMTABLE_MERE
Ce qui t'assure d'avoir un nom unique sur ta base...


En clair il te suffit de nommer différemment tes trois FK...

merci pour ton aide mais comme je suis une vraie tâche en BDD et que j'ai trouvé 30 façon de déclarer une FK sur le net je me retrouve à errer comme une âme en peine sur les forums et le pire c'est que je parle Anglais ..
mia06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 06h15   #4
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 668
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 668
Points : 8 718
Points : 8 718
Bonjour,

En ce qui concerne l'ajout de contraintes à des tables qui existent déjà, j'ai donné comment ajouter chacune d'entre-elles ici, ce que l'on trouve facilement avec un moteur de recherche, en Français

Citation:
Msg 2714, Level 16, State 4, Line 2
There is already an object named 'Id_communes' in the database.
Msg 1750, Level 16, State 0, Line 2
Could not create constraint. See previous errors.
Ceci suggère qu'il existe déjà un objet (contrainte, table, vue, trigger, procédure stockée, fonction) portant déjà ce nom.
Les noms des objets doivent être unique dans un schéma de base de données.
Pour le savoir, et en supposant que vous êtes sous SQL Server 2005 ou 2008 :

Code :
1
2
3
4
5
6
SELECT		S.name AS nom_schema
		, O.name AS nom_objet
		, O.type_desc AS type_objet
FROM		sys.objects AS O
INNER JOIN	sys.schemas AS S ON O.schema_id = S.schema_id
WHERE		O.name = 'Id_communes'
Pouvez-vous donner la structure de vos 4 tables, ainsi que la liste des relations que vous voulez créer ? J'ai publié un tutoriel ici à ce sujet (ne scriptez pas les données, nous n'en avons pas besoin).

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 09h52   #5
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Citation:
Envoyé par iberserk Voir le message
C'est simple, une contrainte FOREIGN KEY doit avoir un nom unique sur ta base...
C'est faux.... une contrainte doit avoir un nom unique au sein du SCHEMA SQL (norme SQL) et non de la base.

Démo :

Code :
1
2
3
4
5
6
7
8
9
10
11
USE tempdb;
GO
 
CREATE TABLE dbo.T0 (K INT PRIMARY KEY);
CREATE TABLE dbo.T1 (K1 INT CONSTRAINT FK FOREIGN KEY REFERENCES dbo.T0 (K));
 
CREATE SCHEMA S1
CREATE TABLE T1 (K1 INT CONSTRAINT FK FOREIGN KEY REFERENCES dbo.T0 (K));
 
CREATE SCHEMA S2
CREATE TABLE T1 (K1 INT CONSTRAINT FK FOREIGN KEY REFERENCES dbo.T0 (K));
Code :
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
Résultat :
Code :
1
2
3
4
5
CONSTRAINT_CATALOG      CONSTRAINT_SCHEMA     CONSTRAINT_NAME   
----------------------- --------------------- ------------------
tempdb                  dbo                   FK                
tempdb                  S1                    FK                
tempdb                  S2                    FK
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 09h53   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Citation:
Envoyé par mia06 Voir le message
merci pour ton aide mais comme je suis une vraie tâche en BDD et que j'ai trouvé 30 façon de déclarer une FK sur le net je me retrouve à errer comme une âme en peine sur les forums et le pire c'est que je parle Anglais ..
Le mieux serait de commencer à apprendre SQL ! Mon site web, comme mon livre peuvent vous y aider...
Notamment : http://sqlpro.developpez.com/cours/s...partie2#L7.1.7

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 09h54   #7
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
C'est faux.... une contrainte doit avoir un nom unique au sein du SCHEMA SQL (norme SQL) et non de la base.

Certes... il faut être précis même si je doute que la notion de schéma lui parle ici...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 10h35   #8
Invité de passage
 
Lamia
Inscription : janvier 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Lamia

Informations forums :
Inscription : janvier 2011
Messages : 10
Points : 1
Points : 1
Merci pour votre aide messieurs , vous m'avez été d'un grand secours
mia06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h17.


 
 
 
 
Partenaires

Hébergement Web