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 29/08/2011, 15h22   #1
Membre habitué
 
Avatar de tfc3146
 
Homme Robert Labrousse
Développeur décisionnel
Inscription : février 2009
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Robert Labrousse
Localisation : France

Informations professionnelles :
Activité : Développeur décisionnel
Secteur : Boutique - Magasin

Informations forums :
Inscription : février 2009
Messages : 79
Points : 134
Points : 134
Par défaut DELETE FROM . . . WHERE EXISTS

Bonjour,
Je suis sous SQL Server.

Cette requête fonctionne avec un SELECT, mais ne me supprime aucune ligne avec un DELETE

Pourquoi ? Toute aide ou information est la bienvenue, parce que là je sèche ...

Merci.
Code :
1
2
3
4
5
6
7
8
9
 
DELETE FROM TabDim
WHERE EXISTS (SELECT D2.*
	         FROM TabDim D2
	         WHERE COD_NAT=D2.COD_NAT
	         AND COD_CHA<>D2.COD_CHA)
AND LaPerio <> (SELECT MAX(D3.LaPerio)
	          FROM TabDim D3
	          WHERE D3.COD_NAT=COD_NAT)
__________________
Citation:
C'est en faisant n'importe quoi qu'on devient n'importe qui
Si un message vous a aidé, n'hésitez pas à mettre +1
tfc3146 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 09h14   #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
Code :
1
2
3
4
5
6
7
8
9
10
 
SELECT *
FROM TabDim
WHERE EXISTS (SELECT D2.*
	         FROM TabDim D2
	         WHERE COD_NAT=D2.COD_NAT
	         AND COD_CHA<>D2.COD_CHA)
AND LaPerio <> (SELECT MAX(D3.LaPerio)
	          FROM TabDim D3
	          WHERE D3.COD_NAT=COD_NAT)
Cette requête vous retourne quelque chose et le DELETE ne fait rien?

N'avez vous pas un message d'erreur lors de la suppression?
__________________
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 30/08/2011, 10h15   #3
Membre habitué
 
Avatar de tfc3146
 
Homme Robert Labrousse
Développeur décisionnel
Inscription : février 2009
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Robert Labrousse
Localisation : France

Informations professionnelles :
Activité : Développeur décisionnel
Secteur : Boutique - Magasin

Informations forums :
Inscription : février 2009
Messages : 79
Points : 134
Points : 134
Déjà merci de votre réponse.

Non, ma requête ne génère pas d'erreur SQL. Elle m'indique juste qu'aucune ligne n'a été supprimée.
Et en effet, la même requête SQL avec un SELECT me retrourne le résultat souhaité.

La suppression de la sous-requête :
Code :
1
2
3
4
5
 
 
AND LaPerio <> (SELECT MAX(D3.LaPerio)
	          FROM TabDim D3
	          WHERE D3.COD_NAT=COD_NAT)
ne change rien au problème.

(COD_CHA, COD_NAT) couple PK de ma table TabDim.
__________________
Citation:
C'est en faisant n'importe quoi qu'on devient n'importe qui
Si un message vous a aidé, n'hésitez pas à mettre +1
tfc3146 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 10h31   #4
Membre habitué
 
Avatar de tfc3146
 
Homme Robert Labrousse
Développeur décisionnel
Inscription : février 2009
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Robert Labrousse
Localisation : France

Informations professionnelles :
Activité : Développeur décisionnel
Secteur : Boutique - Magasin

Informations forums :
Inscription : février 2009
Messages : 79
Points : 134
Points : 134
Ah !
Je crois avoir trouvé ! Le problème vient du fait que je ne puisse pas définir un alias sur TabDim que je veux supprimer.

Si je mets un alias D1, il plante (j'avais pu le mettre dans mon SELECT, c'est pour cela que ça fonctionnait en effet )

Code :
1
2
3
4
5
6
7
8
9
 
DELETE FROM TabDim D1
WHERE EXISTS (SELECT D2.*
			  FROM TabDim D2
			  WHERE D1.COD_NAT=D2.COD_NAT
			  AND D1.COD_CHA<>D2.COD_CHA)
AND D1.LaPerio <> (SELECT MAX(D3.LaPerio)
				FROM TabDim D3
				WHERE D3.COD_NAT=D1.COD_NAT)
Msg*102, Niveau*15, État*1, Ligne*1
Syntaxe incorrecte vers 'D1'.
Msg*156, Niveau*15, État*1, Ligne*6
Syntaxe incorrecte vers le mot clé 'AND'.
__________________
Citation:
C'est en faisant n'importe quoi qu'on devient n'importe qui
Si un message vous a aidé, n'hésitez pas à mettre +1
tfc3146 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 10h35   #5
Membre habitué
 
Avatar de tfc3146
 
Homme Robert Labrousse
Développeur décisionnel
Inscription : février 2009
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Robert Labrousse
Localisation : France

Informations professionnelles :
Activité : Développeur décisionnel
Secteur : Boutique - Magasin

Informations forums :
Inscription : février 2009
Messages : 79
Points : 134
Points : 134
J'ai trouvé ça :

"Non, à ma connaissance, SQL-Server ne supporte pas les alias pour la
commande Delete. Vous pouvez néanmoins retravailler votre requête pour
utiliser un énoncé EXISTS ou NOT EXISTS ou IN"

Mais dans mon cas, puis je y arriver ? Je ne vois vraiment pas comment faire ...
__________________
Citation:
C'est en faisant n'importe quoi qu'on devient n'importe qui
Si un message vous a aidé, n'hésitez pas à mettre +1
tfc3146 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 30/08/2011, 12h33   #6
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
exemple de syntaxe :
Code :
1
2
3
4
5
6
7
8
9
10
-- Transact-SQL extension
USE AdventureWorks2008R2;
GO
DELETE FROM Sales.SalesPersonQuotaHistory 
FROM Sales.SalesPersonQuotaHistory AS spqh
INNER JOIN Sales.SalesPerson AS sp
ON spqh.BusinessEntityID = sp.BusinessEntityID
WHERE sp.SalesYTD > 2500000.00;
 
GO
http://msdn.microsoft.com/fr-fr/library/ms189835.aspx
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h43.


 
 
 
 
Partenaires

Hébergement Web