Correction d'une requete SQL Delete.... - SQL/NoSQL - Programmation
Marsh Posté le 18-04-2007 à 17:53:09
t'est sur de ça ? pg.tpGroupID = g.gId
Marsh Posté le 19-04-2007 à 08:30:47
zecrazytux a écrit : t'est sur de ça ? pg.tpGroupID = g.gId |
euh.... bah c'est la relation entre les 2 tables koi
Marsh Posté le 19-04-2007 à 09:01:43
sur MSDN j'ai trouvé l'exemple suivant, mais impossible de l'appliquer à ma requete.... (si possible sans utiliser les INNER JOIN...)
DELETE FROM Sales.SalesPersonQuotaHistory
FROM Sales.SalesPersonQuotaHistory AS spqh
INNER JOIN Sales.SalesPerson AS sp
ON spqh.SalesPersonID = sp.SalesPersonID
WHERE sp.SalesYTD > 2500000.00;
GO
Marsh Posté le 19-04-2007 à 10:48:13
Ta requete ne marche pas fonctionnellement ou techniquement ? Tu cherche à l'executer sous quel sgbd ?
Marsh Posté le 19-04-2007 à 11:10:50
DELETE ne peut supprimer que dans une table à la fois.
Par contre, afin de gérer les relations entre les tables, on peut joindre cette table à d'autres.
Syntaxe SQL Server :
Code :
|
Cette syntaxe est propriétaire SQL Server, et ne fonctionne que sur ce produit. D'autres SGBD disposent de différentes syntaxes propriétaires aussi. Consulte donc la documentation du SGBD que tu utilises (à la version près !)
(ceci dit, je ne vois pas pourquoi tu utilises ça "pg.tpProfileID = '7df60fae-a026-4a0b-878a-0dd7e5308b09'" <- là tu ne supprimque qu'un truc)
Ensuite, pour supprimer tous les profiles d'un groupe par exemple, logiquement :
-> Dans la table des profiles t'as un champ indiquant le groupe. Donc tu peux aisément retrouver la liste des profils à supprimer, sans passer par le groupe.
-> Si c'est plus complexe, mais tes relations correctement écrite, et qu'en plus tu veux supprimer le groupe avec ses profiles, l'utilisation des fonctionnalités de "CASCADE CONSTRAINT" est particulièrement conseillée (standard)
Marsh Posté le 19-04-2007 à 13:35:52
MagicBuzz a écrit : DELETE ne peut supprimer que dans une table à la fois.
|
Hello! Merci pour ta réponse! J'utilise bien SQL, mais dans sa version "Compact Edition"
La requete que tu proposes ne fonctionne pas... je suis en-train de me demander si c'est pas une limitation au niveau de SQLce...
J'ai 3 tables :
Profiles
Goups
ProfilesGroups
Un profile peut donc faire parti de plusieurs groupes (qui eux appartiennent à la même personne(profile)).
Donc lorsque la personne supprime un profile, je lui demande si elle veut supprimer ce profil uniquement du groupe actuel ou de tous les groupes ou il apparait (-> la requete de ce post devrait fonctionner pour une suppression du profile dans tous les groupes (appartenant à la personne...)!)
Merci pour votre aide
++
Marsh Posté le 19-04-2007 à 13:44:34
ReplyMarsh Posté le 19-04-2007 à 14:04:30
jeriko6911 a écrit : Sympa le duc deviter ma question, continue à m'ignorer PAUVRE TYPE |
bah je t'ai répondu la 1ere fois.... et la 2e je l'ai pas vu!
T'as une partie de la réponse dans mon post précédant (SQL Compact Edition) et l'erreur retournée est la suivante (avec la requete proposée par MagicBuzz) :
Major Error 0x80040E14, Minor Error 25501
> DELETE
FROM ProfilesGroups pg
INNER JOIN Groups g ON tpGroupID = g.gId
WHERE pg.tpProfileID = '7df60fae-a026-4a0b-878a-0dd7e5308b09'
AND g.gProfileID = '8a6859ce-9f99-4aaf-9ed6-1af66cd15894'
There was an error parsing the query. [ Token line number = 2,Token line offset = 21,Token in error = pg ]
....
Marsh Posté le 19-04-2007 à 14:11:18
Effectivement, SQL Server CE est TRES limité.
Je pense que le plus simple, c'est de faire un SELECT pour retrouver les lignes à supprimer, puis les supprimer une à une.
J'ai pas de SQL Server CE sous la main, et en plus c'est la tanée pour faire des tests dessus, donc chaud les marrons pour trouver mieux.
L'intérêt de faire ça, même si c'est pas ce qu'il y a de plus propre, c'est que tu es sûr que ça marche, même si demain tu déploies ton application avec autrechose que SQL Server CE ou une autre version du produit.
PS : Je ne sais plus s'il supporte les transactions. Si c'est le cas, surtout utilises-en une. Ca évitera d'avoir des données instables en cas d'erreur.
Marsh Posté le 19-04-2007 à 18:33:48
MagicBuzz a écrit : Effectivement, SQL Server CE est TRES limité. |
il ne supporte pas les transactions malheureusement
Marsh Posté le 20-04-2007 à 11:21:32
Je confirme que SQL CE ne supporte pas les delete impliquant plusieurs tables!
Il faut donc faire plusieurs requetes séparées pour arriver à ce résultat ;-).
++
Marsh Posté le 18-04-2007 à 17:21:33
yop yop
qqn pourrais me corriger cette requete qui ne fonctionne pas ?
En fait j'aimerais supprimer le profil x (ici 7df60fae-a026-4a0b-878a-0dd7e5308b09) de tous les groupes d'utilisateurs qui m'appartiennent (8a6859ce-9f99-4aaf-9ed6-1af66cd15894 = mon identifiant).
Merci, +++