J'utilise SQL Server et j'essaie d'utiliser SQL pour mettre à jour plusieurs tables à la fois avec une seule requête:
La requête suivante:
update table1
set A.ORG_NAME = @ORG_NAME, B.REF_NAME = @REF_NAME
from table1 A, table2 B
where B.ORG_ID = A.ORG_ID
and A.ORG_ID = @ORG_ID
Donne le message d'erreur:
L'identifiant en plusieurs parties "A.ORG_NAME" n'a pas pu être lié.
Que signifie le message d'erreur?
Vous ne pouvez pas mettre à jour plusieurs tables dans une seule instruction, mais le message d'erreur que vous obtenez est dû aux alias, vous pouvez essayer ceci:
BEGIN TRANSACTION
update A
set A.ORG_NAME = @ORG_NAME
from table1 A inner join table2 B
on B.ORG_ID = A.ORG_ID
and A.ORG_ID = @ORG_ID
update B
set B.REF_NAME = @REF_NAME
from table2 B inner join table1 A
on B.ORG_ID = A.ORG_ID
and A.ORG_ID = @ORG_ID
COMMIT
Vous pouvez mettre à jour avec une jointure si vous n'affectez qu'une seule table comme celle-ci:
UPDATE table1
SET table1.name = table2.name
FROM table1, table2
WHERE table1.id = table2.id
AND table2.foobar ='stuff'
Mais vous essayez d'affecter plusieurs tables avec une instruction de mise à jour qui se joint à plusieurs tables. Ce n'est pas possible.
Cependant, la mise à jour de deux tables dans une seule instruction est en fait possible, mais il faudra créer une vue à l'aide d'un UNION qui contient les deux tables que vous souhaitez mettre à jour. Vous pouvez ensuite mettre à jour la vue qui mettra ensuite à jour les tables sous-jacentes.
Mais c'est un truc de salon vraiment hacky, utilisez la transaction et plusieurs mises à jour, c'est beaucoup plus intuitif.