Pb de requete Update d1 table en fonction d1 autre table
Bowen123
Messages postés32Date d'inscriptionvendredi 17 décembre 2004StatutMembreDernière intervention21 septembre 2011
-
25 avril 2005 à 17:38
teuzadur
Messages postés6Date d'inscriptionmardi 5 juillet 2005StatutMembreDernière intervention 8 septembre 2006
-
12 oct. 2005 à 09:20
Bonjour,
Je souhaite faire une requete de ce genre
UPDATE Table1
SET Table1.valeur = Table2.valeur
WHERE Table2.valeur = Table2.valeur2
tous ceci dans une procedure stockée sous oracle.
Bien sur ca marche pas ... Help me please
A voir également:
Pb de requete Update d1 table en fonction d1 autre table
alf974
Messages postés5Date d'inscriptionlundi 14 février 2005StatutMembreDernière intervention22 avril 2007 8 juin 2005 à 15:09
Je pense que ton exemple :
UPDATE Table1
SET Table1.valeur = Table2.valeur
WHERE Table2.valeur = Table2.val
contient un petit problème d'algo, car la mise à jour s'effectuera sur l'ensemble de Table1 (la condition Where ne contenant aucun élément de Table1....)
la requête la plus courante pour mettre à jour une table1 avec des éléments d'une table2 c'est :
update Table1set Table1.valeur (select Table2.valeur from Table2 where Table2.val Table1.val)
where exists (select Table2.val from Table2 where Table2.val=Table1.val)
alf974
Messages postés5Date d'inscriptionlundi 14 février 2005StatutMembreDernière intervention22 avril 2007 11 oct. 2005 à 02:36
Bonjour,
en effet, MSAccess est beaucoup plus "laxiste" que SQL Server pour le langage SQL, il autorise en effet l'utilisation de plusieurs tables dans le update, ce qui ne veut pas dire que le update se fait sur les deux tables. Attention !
Seule la table "Travaux" est mise à jour.
Voici donc la requête réécrite :
UPDATE Travaux
SET (Travaux.DateCreation, Travaux.Commentaire) =
( select TravauxXl.DateCreation, TravauxXl.Commentaires
from TravauxXl
WHERE Travaux.Msn = TravauxXl.Msn AND
Travaux.Domaine = TravauxXl.Domaine AND
Travaux.TypeTravaux = TravauxXl.TypeTravaux AND
Travaux.Numero = TravauxXl.Numero AND
Travaux.Msn='" & pMsn & "'")
where
exists (select TravauxXl.Numero
from TravauxXl
WHERE Travaux.Msn = TravauxXl.Msn AND
Travaux.Domaine = TravauxXl.Domaine AND
Travaux.TypeTravaux = TravauxXl.TypeTravaux AND
Travaux.Numero = TravauxXl.Numero AND
Travaux.Msn='" & pMsn & "'")
teuzadur
Messages postés6Date d'inscriptionmardi 5 juillet 2005StatutMembreDernière intervention 8 septembre 2006 11 oct. 2005 à 11:57
Merci pour votre aide.
Oui je suis d'accord on ne peut mettre à jour qu'une seule table en même temps, même si dans la syntaxe d'access il y a 2 tables.
Par contre alf le principe de ta requête ne semble pas fonctionner. Je pense d'ailleurs qu'il y a une erreur dans le where exists. Je ne comprends pas a quoi sert ce deuxieme tests where exists.
Cela fait maintenant 3 jours que je cherche, les boules mon chef va me tomber dessus :-) Je continue de chercher!
alf974
Messages postés5Date d'inscriptionlundi 14 février 2005StatutMembreDernière intervention22 avril 2007 11 oct. 2005 à 19:54
Essayes ceci :
UPDATE Travaux
<TT>SET Travaux.DateCreation=t1.DateCreation, Travaux.Commentaire =t1.Commentaires
</TT><TT>FROM (select TravauxXl.Msn,TravauxXl.Domaine ,TravauxXl.TypeTravaux ,TravauxXl.Numero,TravauxXl.DateCreation, TravauxXl.Commentaires from TravauxXl) AS t1</TT>
<TT>WHERE Travaux.Msn = t1.Msn AND
Travaux.Domaine = t1.Domaine AND
Travaux.TypeTravaux = t1.TypeTravaux AND
Travaux.Numero = t1.Numero AND
Travaux.Msn='" & pMsn & "'"
</TT>
Excuse moi pour les hésitations, mais je suis plus habitué à Oracle...
teuzadur
Messages postés6Date d'inscriptionmardi 5 juillet 2005StatutMembreDernière intervention 8 septembre 2006 12 oct. 2005 à 09:20
J'ai trouvé la réponse, merci à vous.
Ci-dessous la requete tsql :
CREATE PROCEDURE dbo.UpdateTravauxXl AS
UPDATE Travaux SET Travaux.DateCreation=BddMaitre.dbo.TravauxXl.DateCreation, Travaux.Commentaire=BddMaitre.dbo.TravauxXl.Commentaires
FROM Travaux, BddMaitre.dbo.TravauxXl
WHERE Travaux.Msn=BddMaitre.dbo.TravauxXl.Msn AND Travaux.Domaine=BddMaitre.dbo.TravauxXl.Domaine AND Travaux.TypeTravaux=BddMaitre.dbo.TravauxXl.TypeTravaux AND Travaux.Numero=BddMaitre.dbo.TravauxXl.Numero AND Travaux.Msn='1'
GO