Pb de requete Update d1 table en fonction d1 autre table

Bowen123 Messages postés 32 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 21 septembre 2011 - 25 avril 2005 à 17:38
teuzadur Messages postés 6 Date d'inscription mardi 5 juillet 2005 Statut Membre Derniè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

9 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
25 avril 2005 à 19:16
salut,



Essai avec une requete du type

UPDATE Table1
SET Table1.valeur = (select top 1 valeur fromTable2)
WHERE Table2.valeur = Table2.valeur2




cette requete fonctionne je pense avec sqlserver

avec oracle il faut faire une adaptation



voila esperant d'avoir guider

je n'est pas oracle et sqlserver sur cette machine
0
alf974 Messages postés 5 Date d'inscription lundi 14 février 2005 Statut Membre Dernière intervention 22 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)

Un petit coucou de l'Océan Indien
0
teuzadur Messages postés 6 Date d'inscription mardi 5 juillet 2005 Statut Membre Dernière intervention 8 septembre 2006
10 oct. 2005 à 15:38
Bonjour,

J'ai le même problème, je migre un programme VB+ACCESS vers VB+SQL SERVER.
La requête suivante est en erreur sous sql server 2000 :

Requete = "UPDATE Travaux,TravauxXl " _
& "SET Travaux.DateCreation = TravauxXl.DateCreation, " _
& " Travaux.Commentaire = TravauxXl.Commentaires " _
& "WHERE Travaux.Msn = TravauxXl.Msn AND " _
& " Travaux.Domaine = TravauxXl.Domaine AND " _
& " Travaux.TypeTravaux = TravauxXl.TypeTravaux AND " _
& " Travaux.Numero = TravauxXl.Numero AND " _
& " Travaux.Msn='" & pMsn & "'"

Quel est l'équivalent de cette requête sous SQL SERVER?

Merci de votre aide
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
10 oct. 2005 à 19:13
Salut

Tu ne peux pas updater deux tables en meme temps
Utilises deux requetes et une transaction
c'est bizarre que tu y arrives avec access
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alf974 Messages postés 5 Date d'inscription lundi 14 février 2005 Statut Membre Dernière intervention 22 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 & "'")

Un petit coucou de l'Océan Indien
0
teuzadur Messages postés 6 Date d'inscription mardi 5 juillet 2005 Statut Membre Derniè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!
0
teuzadur Messages postés 6 Date d'inscription mardi 5 juillet 2005 Statut Membre Dernière intervention 8 septembre 2006
11 oct. 2005 à 12:05
En fait il attend un = dès la première valeur du SET je pense

syntaxe SQL SERVER (d'après source du bouquin):

UPDATE nom_table
SET {nom_colonne={expression | default } [,]}
[FROM table_source]
[WHERE condition]

C'est que des exemples trivial dans le bouquin, pas de cas concret comme liaison entre 2 tables. Merci de votre aide.
0
alf974 Messages postés 5 Date d'inscription lundi 14 février 2005 Statut Membre Dernière intervention 22 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...

Un petit coucou de l'Océan Indien
0
teuzadur Messages postés 6 Date d'inscription mardi 5 juillet 2005 Statut Membre Derniè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
0
Rejoignez-nous