Mettre à jour une table en utilisant JOIN dans SQL Server ?
Vous n’avez pas tout à fait la bonne syntaxe propriétaire UPDATE FROM de SQL Server. De plus, je ne suis pas sûr de la raison pour laquelle vous avez eu besoin de joindre sur le CommonField et aussi de filtrer dessus ensuite. Essayez ceci :
UPDATE t1
SET t1.CalculatedColumn = t2.[Calculated Column]
FROM dbo.Table1 AS t1
INNER JOIN dbo.Table2 AS t2
ON t1.CommonField = t2.[Common Field]
WHERE t1.BatchNo = '110';
Si vous faites quelque chose de peu judicieux - comme essayer constamment de définir la valeur d’une colonne sur l’agrégat d’une autre colonne (ce qui viole le principe d’éviter de stocker des données redondantes), vous pouvez utiliser un CTE (expression de table commune) - consultez ici et ici pour plus de détails :
;WITH t2 AS
(
SELECT [key], CalculatedColumn = SUM(some_column)
FROM dbo.table2
GROUP BY [key]
)
UPDATE t1
SET t1.CalculatedColumn = t2.CalculatedColumn
FROM dbo.table1 AS t1
INNER JOIN t2
ON t1.[key] = t2.[key];
La raison pour laquelle c’est peu judicieux, c’est que vous allez devoir réexécuter cette mise à jour entière à chaque fois qu’une ligne dans table2 change. Un SUM est quelque chose que vous pouvez toujours calculer au moment de l’exécution et, ce faisant, vous n’avez jamais à vous soucier que le résultat soit obsolète.