834 votes

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

<p>Je veux mettre à jour une colonne dans une table faisant une jointure sur une autre table par exemple :<pre><code></code></pre><p>Mais il se plaint :</p><pre><code></code></pre><p>Ce qui ne va pas ici ?</p></p>

1596voto

Aaron Bertrand Points 116343
<p>Vous n’avez pas tout à fait exclusifs de SQL Server <code></code> syntaxe vers le bas. Aussi ne sais pas pourquoi vous avez besoin de joindre sur le <code></code> et aussi filtrer sur elle par la suite. Essayez ceci :<pre><code></code></pre></p>

46voto

RBarryYoung Points 23349
<p>Essayer comme ceci :<pre><code></code></pre><p>(edit : bon sang les fautes de frappe !)</p></p>

29voto

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.

2voto

CW1255 Points 19
<p>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.<pre><code></code></pre></p>

0voto

PureWeen Points 342
<p>Une autre approche serait d’utiliser MERGE<pre><code></code></pre><p>-Fusion fait partie de la norme SQL (bien que je ne pense pas que du CTE sont)</p><p>-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 <a href="http://ask.sqlservercentral.com/questions/19089/updating-two-tables-using-single-query.html" rel="nofollow">http://ask.sqlservercentral.com/questions/19089/updating-two-tables-using-single-query.html</a></p></p>

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