web-dev-qa-db-fra.com

Mettre à jour plusieurs tables dans SQL Server à l'aide d'INNER JOIN

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?

17
Coyolero

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
30
jazzytomato

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.

SQL JOINS

Mais c'est un truc de salon vraiment hacky, utilisez la transaction et plusieurs mises à jour, c'est beaucoup plus intuitif.

15
Eric Leschinski