910 votes

Mettre à jour une table à l’aide de JOIN dans SQL Server ?

Je veux mettre à jour une colonne dans une table faisant une jointure sur une autre table par exemple :

Mais il se plaint :

Ce qui ne va pas ici ?

1727voto

Aaron Bertrand Points 116343

Vous n’avez pas tout à fait exclusifs de SQL Server syntaxe vers le bas. Aussi ne sais pas pourquoi vous avez besoin de joindre sur le et aussi filtrer sur elle par la suite. Essayez ceci :

58voto

RBarryYoung Points 23349

Essayer comme ceci :

(edit : bon sang les fautes de frappe !)

37voto

Ankur Bhutani Points 341

Réponse donnée ci-dessus par Aaron est parfait:

UPDATE a
  SET a.CalculatedColumn = b.[Calculated Column]
  FROM Table1 AS a
  INNER JOIN Table2 AS b
  ON a.CommonField = b.[Common Field]
  WHERE a.BatchNo = '110';

Veux juste ajouter que la cause de ce problème dans SQL server lorsque nous essayons d'utiliser l'alias d'une table pendant la mise à jour de la table ci-dessous décrivent la syntaxe donnera toujours l'erreur:

update tableName t 
set t.name = 'books new' 
where t.id = 1

le cas peut être n'importe si vous êtes à la mise à jour d'une table unique ou la mise à jour tout en utilisant la rejoindre.

Bien que la requête ci-dessus fonctionnera très bien en pl/sql, mais pas dans ms sql.

bonne façon de mettre à jour une table lors de l'utilisation d'alias de table dans MS SQL est:

update t 
set t.name = 'books new' 
from tableName t 
where t.id = 1

J'espère que ça aidera tout le monde pourquoi erreur est venu ici.

3voto

CW1255 Points 19

J’estime utile de transformer une mise à jour en un SELECT pour obtenir les lignes que je veux mettre à jour comme un test avant la mise à jour. Si je peux sélectionner les lignes exactes que je veux, je peux mettre à jour uniquement ces lignes que je veux mettre à jour.

2voto

PureWeen Points 342

Une autre approche serait d’utiliser MERGE

-Fusion fait partie de la norme SQL (bien que je ne pense pas que du CTE sont)

-Aussi, je suis sûr que les mises à jour de jointure interne sont non déterministes... Question similaire ici où la réponse parle de cette http://ask.sqlservercentral.com/questions/19089/updating-two-tables-using-single-query.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X