Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 17/01/2011, 17h30   #1
Invité de passage
 
youssef elam
Inscription : janvier 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : youssef elam

Informations forums :
Inscription : janvier 2011
Messages : 9
Points : 3
Points : 3
Par défaut suprimer ligne utiliser par autre tables sqlserver 2005

bonjour
je veux supprimer une ligne(1) mais le probléme que cette ligne utiliser par une autre ligne(2) d'une autre table et la ligne(2) utiliser par ligne(3) d'une autre table etc..
j'ai utiliser ce code j'ai commencé de suprimer la ligne (4) et apres ligne(3)...
voila code
Code :
1
2
3
4
DELETE FROM LIGNEVENTE WHERE ARTICLE.Code_Famille ='1' AND ARTICLE.CODE_ART=LIGNEVENTE.CODE_ART
DELETE  FROM LIGNEENTREEART WHERE  ARTICLE.Code_Famille ='1' AND ARTICLE.CODE_ART=LIGNEENTREEART.CODE_ART
DELETE FROM ARTICLE WHERE Code_Famille= '1'
 DELETE FROM Familles WHERE Code_Famille ='1'
mais ca marche pas voila les erreurs
Code :
1
2
3
4
5
6
7
8
Msg*4104, Niveau*16, État*1, Ligne*1
L'identificateur en plusieurs parties 'ARTICLE.Code_Famille' ne peut pas être lié.
Msg*4104, Niveau*16, État*1, Ligne*1
L'identificateur en plusieurs parties 'ARTICLE.CODE_ART' ne peut pas être lié.
Msg*4104, Niveau*16, État*1, Ligne*2
L'identificateur en plusieurs parties 'ARTICLE.Code_Famille' ne peut pas être lié.
Msg*4104, Niveau*16, État*1, Ligne*2
L'identificateur en plusieurs parties 'ARTICLE.CODE_ART' ne peut pas être lié.
remarque Code_Famille(char)
aidez-moi SVP
yesman0222 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 18h04   #2
Membre Expert
 
Homme
Développeur java, access, sql server
Inscription : octobre 2005
Messages : 851
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Développeur java, access, sql server
Secteur : Industrie

Informations forums :
Inscription : octobre 2005
Messages : 851
Points : 1 302
Points : 1 302
Si j'ai bien compris, il faut supprimer tous les articles dont la famille est '1' ?
On suppose que la clé primaire de LIGNEVENTE est [ID_Ligne] :
Code :
1
2
3
4
5
 
DELETE FROM LIGNEVENTE WHERE ID_Ligne IN 
(SELECT ID_Ligne FROM LIGNEVENTE INNER JOIN 
ARTICLE ON ARTICLE.CODE_ART=LIGNEVENTE.CODE_ART
WHERE ARTICLE.Code_Famille ='1' )
__________________
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser.
First, make it work. Then, make it fast. Finally, make it user-friendly.
Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich.
Népomucène est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 20h20   #3
Invité de passage
 
youssef elam
Inscription : janvier 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : youssef elam

Informations forums :
Inscription : janvier 2011
Messages : 9
Points : 3
Points : 3
j'ai essayé votre code sqlserver affiche cette erreur
Code :
1
2
Msg*116, Niveau*16, État*1, Ligne*1
Une seule expression peut être spécifiée dans la liste de sélection quand la sous-requête n'est pas introduite par EXISTS.
et apres j'ai utilisé ce code
Code :
1
2
3
DELETE  FROM LIGNEVENTE WHERE EXISTS(SELECT * FROM LIGNEVENTE INNER JOIN 
ARTICLE ON ARTICLE.CODE_ART=LIGNEVENTE.CODE_ART
WHERE ARTICLE.Code_Famille ='1' )
ca marche merci bcp
yesman0222 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 08h37   #4
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 665
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 665
Points : 8 710
Points : 8 710
Bonjour,

Il y avait encore plus simple :

Code :
1
2
3
4
5
DELETE		FROM dbo.LIGNEVENTE 
FROM		dbo.LIGNEVENTE AS LV
INNER JOIN	dbo.ARTICLE AS A 
			ON A.CODE_ART = LV.CODE_ART
WHERE		A.Code_Famille ='1'
La clause EXISTS étant optimisée pour l'utilisation de '*' (comme pour COUNT(), mais pas pour un SELECT), vous pouvez l'utiliser en tant que tel a volonté

@++
__________________
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
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h16.


 
 
 
 
Partenaires

Hébergement Web